【问题标题】:Attributes ASP.NET MVC5属性 ASP.NET MVC5
【发布时间】:2014-03-10 19:56:56
【问题描述】:

在一个ASP.NET MVC5项目如自动生成多个标签

  • HttpPost
  • ActionName("Delete")
  • ValidateAntiForgeryToken

    1. HttpPost / ValidateAntiForgeryToken 是好的做法还是强制性的?
    2. 使用 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 并多次重播,因为服务器颁发的令牌每次都需要不同。

    【讨论】:

      【解决方案2】:
      • [HttpPost] 属性 - 表示用于限制操作方法的属性,以便该方法仅处理 HTTP POST 请求 - 根据 MSDN HttpPostAttribute

      • ActionName("action-name") 用于指定操作方法的别名。您可以为您的操作方法起一个友好的名称

      • ValidateAntiForgeryToken - 见这里:AntiForgeryTokenAttribute

      【讨论】:

        【解决方案3】:

        使用 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/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-12
          • 2014-10-25
          • 1970-01-01
          • 2016-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多