属性ASP.NET MVC5

时间:2014-03-10 19:56:57

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5

ASP.NET MVC5项目中会自动生成多个标记,例如

  • HttpPost
  • ActionName(“删除”)
  • ValidateAntiForgeryToken

    1. HttpPost / ValidateAntiForgeryToken是否有良好的实践或强制性?
    2. 使用HttpPost属性声明函数时实际发生了什么?

由于

3 个答案:

答案 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/