ASP.NET MVC5项目中会自动生成多个标记,例如
的 ValidateAntiForgeryToken 的
由于
答案 0 :(得分:4)
使用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并重播多次,因为服务器发出的令牌每次都需要不同。
答案 1 :(得分:2)
[HttpPost]属性 - 表示用于限制操作方法的属性,以便该方法仅处理HTTP POST请求 - 根据MSDN HttpPostAttribute
ActionName(“action-name”)用于指定操作方法的别名。您可以为您的操作方法提供友好名称
ValidateAntiForgeryToken - 请参阅此处:AntiForgeryTokenAttribute
答案 2 :(得分:1)
使用HttpGet / HttpPost属性可以增加清晰度并且是一种很好的做法,但不是强制性的。通常,路由器将确定要调用的正确方法,但添加该属性将限制哪些Action方法映射到HTTP方法。有关更完整的说明,请参阅此回复:MVC [HttpPost/HttpGet] for Action
对于ValidateAntiForgeryToken,我认为这是强制性的,尽管许多开发人员可能会忽略它。如果使用正确,它将防止跨站点伪造攻击。关于令牌和攻击的使用的解释可以在这里找到:
http://en.wikipedia.org/wiki/Cross-site_request_forgery http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/