我在VS.NET 2010中创建了一个新的MVC Web应用程序。我可以毫无问题地访问localhost / Home / Contact。这是一个内置于示例应用程序中的方法。
我添加了另一种方法:
[HttpPost]
public ActionResult MyMethod(ClassA content)
{
return new HttpStatusCodeResult(204);
}
当我尝试使用以下方法访问此方法时:
本地主机/主页/的MyMethod
我收到404错误。我已经尝试直接在浏览器(GET)和POSTing。知道什么可能是错的吗?
答案 0 :(得分:1)
HttpPost
属性表示只能通过POST
请求访问该操作,它可以保护您免受其他请求类型(GET,PUT等)的影响。
POST
个请求也可以在没有属性的情况下运行,但GET
个请求也会有效!这可能会暴露通过GET请求插入,更新或删除数据的数据库查询,这是一种不好的做法。想象一下Google将这样的页面编入索引: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。
答案 1 :(得分:0)
此方法仅可通过POST访问。