通常,當您在IIS上託管您的網站(我假設使用ASP .Net MVC)時,您要到服務器端的請求將大部分分爲兩類http動詞,即GET
或POST
。看看下面提到的ASP .NET MVC代碼。在控制器級別,可以使用任何HTTP動詞雖然裝點我們的行動:
現在,讓我們先了解,如果我們使用的是普通的香草ASP .NET MVC框架(沒有任何Java腳本),那麼爲什麼每個請求只能分爲兩類,即GET
和POST
。
比方說,我在我的網站有一個視圖(又名網頁),負責註冊訪問我網站的新用戶。你會看到如下的控制器代碼:
namespace MvcTestApp.Controllers
{
// GET: /Account/Register
[HttpGet]
public ActionResult Register()
{
return View();
}
//
// POST: /Account/Register
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
}
}
您輸入您的瀏覽器的地址欄中的URL http://localhost:9896/Account/Register/
在瀏覽器加載寄存器視圖/網頁。這就像對網頁的第一次請求,因此您的瀏覽器會自動默認爲HttpGet
謂詞,因爲您首次獲得網頁。因此,在這種情況下,下面的方法與[HttpGet]
動詞註解被調用:
[HttpGet]
public ActionResult Register()
{
return View();
}
現在這一頁上我有一個按鈕,我點擊啓動註冊程序一旦我提供的所有註冊相關的細節。如果你看一下網頁的源,然後你看到下面的HTML代碼的按鈕:
<input type="submit" value="Register" />
每當你點擊類型的HTML控件submit
其簡單的工作是發佈/提交的更新內容當前頁面到服務器。任何包括input
html控件在內的html控件都可以通過瀏覽器進行動詞請求。由於這是一個httpPost
對服務器的動詞請求完全相同的URL,所以下面提到的用HttpPost
修飾的方法會被調用。 ASP.Net運行時獲得來自客戶端的請求,它實際上是一個HTTP POST請求此信息,並因此決定調用具有[HttpPost]
註釋控制器上的以下方法:因此只要是
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
.....
.....
}
不要在您的視圖/網頁上使用任何JavaScript,您最終會使http獲取(第一次)請求或http post(使用html提交控件)請求。
在CRUD操作之外,創建和更新/修改操作由與[HttpPost]
註釋相同的方法處理。
HTTP PUT動詞用於創建/替換資源當兩個以下條件都滿足:
- 端點必須冪:所以安全一遍遍重做請求。
- URI必須是正在更新的資源的地址。
您可以閱讀關於put vs post here的更多信息。
所以如果你在服務器端的業務場景將能夠管理與HTTP put動詞相關的約束,那麼ASP.NET MVC有一個規定。您可以在控制器內創建一個動作,並使用[HttpPut]
對其進行裝飾,並使用來自瀏覽器的http put動詞進行調用。
那麼,即使在您碰巧滿足放置動詞規定的標準的某些場景中,您將無法使用HTTP提交按鈕來調用它。你將不得不求助於Java腳本的XMLHttpRequest(即AJAX調用),使PUT動詞要求如下圖所示:
$.ajax({
url: '/Account/Register',
type: 'PUT',
success: function(result) {
// Do something with the result
}
});
此外,各地的HTTP動詞刪除我已經看到人們有明確定義的操作上的用法MVC控制器例如void DeleteUser(int userId)
使用http POST動詞調用。
總之,我們可以看到,對於http PUT,POST和DELETE動詞,我們只需在服務器端使用http POST動詞調用動作/方法。我在平常的商業應用程序中沒有遇到過一個場景,我曾經想過用[HttpPut]
或[HttpDelete]
來裝飾我的MVC動作。
希望這可以幫助你得到一些澄清。
「這取決於」。在Web應用程序的情況下,Web服務器通常將控制權交給Web棧(例如ASP.NET)。但是,對於各種請求(除非截獲),Web服務器將非常高興提供「靜態內容」。通常涉及「映射」和「處理程序」。 – 2012-07-04 01:10:11
閱讀:http://www.apacheweek.com/features/put –