HttpPost
屬性指示該操作只能通過POST
請求訪問,它保護您免受其他請求類型(GET,PUT等)的影響。
POST
請求也會在沒有該屬性的情況下工作,但GET
請求也會!這可能會暴露通過GET請求插入,更新或刪除數據的數據庫查詢,這是不好的做法。想象谷歌索引這樣一個頁面:www.mysite.com/Users/Delete/{id}
,如果您接受GET
請求,它可能會刪除您的完整用戶羣。
GET
是檢索數據,而POST
是提交數據。有關更多信息,請參閱this question。
有不同的方法來啓動POST
請求。
你可以用一個形式裏面Html.BeginForm()
:
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.UserName);
@Html.TextBoxFor(m => m.UserName);
@Html.LabelFor(m => m.Password);
@Html.PasswordFor(m => m.UserName);
<input type="submit" value="Login" />
}
或通過jQuery.post()
:
$.post(
'@Url.Action("MyMethod", "Home")',
{
// data for ClassA.
name: $('#username').val(); // example.
},
function (result) {
// handle the result.
});
但這GET
要求不會工作,如果你裝飾了HttpPost
屬性你的行動:
$.get(
'@Url.Action("MyMethod", "Home")',
function (result) {
// this will not work.
});
或者如果您嘗試通過瀏覽器訪問它。 另請參閱this blogpost。
你能告訴我們_how_你發佈嗎?設計上,你無法通過get請求來達到動作,這就是你用「HttpPost」屬性來裝飾它的原因。 –
嘗試刪除'[HttpPost]',然後在瀏覽器中訪問它。 – Nate