该HttpPost
属性表示只能通过POST
请求访问该操作,它可以保护您免受其他请求类型(GET、PUT 等)的影响。
POST
requests 也可以在没有该属性的情况下工作,但GET
requests 也可以!这可能会暴露通过 GET 请求插入、更新或删除数据的数据库查询,这是一种不好的做法。想象一下 Google 索引这样的页面:www.mysite.com/Users/Delete/{id}
如果您接受GET
请求,它可能会删除您的完整用户群。
GET
是检索数据,POST
是提交数据。有关更多信息,请参阅此问题。
有不同的方式来发起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.
});
或者,如果您尝试通过浏览器访问它。另请参阅此博文。