【问题标题】:Attributes ASP.NET MVC5属性 ASP.NET MVC5
【发布时间】:2014-03-10 19:56:56
【问题描述】:
在一个ASP.NET MVC5项目如自动生成多个标签
-
HttpPost
-
ActionName("Delete")
-
ValidateAntiForgeryToken
- HttpPost / ValidateAntiForgeryToken 是好的做法还是强制性的?
- 使用 HttpPost 属性声明函数时实际发生了什么?
谢谢
【问题讨论】:
标签:
asp.net
asp.net-mvc
asp.net-mvc-3
asp.net-mvc-4
asp.net-mvc-5
【解决方案1】:
当使用 HttpPost 属性声明一个函数时,我实际上在做什么?发布到 Web 服务器或返回数据以供查看?
两者都没有。当你用这个属性声明一个动作方法时:
[HttpPost]
public ActionResult SomeMethod(SomeModel model)
{
// code
}
您所做的是表明只有当请求使用POST HTTP 动词时,请求才应路由到此方法。因此,例如,用户不能尝试通过发出 GET 请求来调用此操作。
HttpPost 是否是“良好做法”完全是主观的。当你想限制可以调用该方法的 HTTP 动词时使用它,当你不想做那个限制时不要使用它。
ValidateAntiForgeryToken 是另一个在您想要制定特定限制时专门使用的属性。这与the @Html.AntiForgeryToken form element helper 结合使用。其目的是确保收到令牌的用户收到验证令牌的请求,这有助于防止请求伪造。
基本上,如果您在视图的表单中放置@Html.AntiForgeryToken,那么它将为该表单的特定实例创建一个唯一值。然后,对任何验证令牌的操作方法的表单 POST 将首先检查令牌是否是在处理请求之前从服务器发出的令牌。这样用户就无法捕获表单 POST 并多次重播,因为服务器颁发的令牌每次都需要不同。