【问题标题】:Excluding an action from authorization in ASP.NET MVC 2在 ASP.NET MVC 2 中从授权中排除操作
【发布时间】:2011-02-27 15:27:00
【问题描述】:

我在我的 ASP.NET MVC 应用程序中使用表单身份验证。我想从授权过程中进入注册页面。我知道我可以在我的主 web.config 文件中添加一个位置标签,或者在特定文件夹中创建一个新的 web.config。但我只是排除用户控制器中的一项特定操作。我该怎么做?

【问题讨论】:

    标签: asp.net asp.net-mvc authorization


    【解决方案1】:

    不要在 MVC 应用程序中使用 Web.config 授权。这样做会导致您的网站存在安全漏洞。

    相反,使用 [Authorize] 属性来控制谁可以访问某些控制器或操作。 (如果您希望将 [Authorize] 属性应用于该控制器中的所有操作,则可以在该控制器的类型上使用该属性。)

    更多信息:

    【讨论】:

    • 除了将这些授权规则编译到网站之外,难道没有一种“好”的方式来管理这些授权规则吗?我希望能够调整规则而无需重新部署应用程序。
    • 查看 blogs.msdn.com/b/rickandy/archive/2012/03/23/… 了解 Levi's cmets 的 MVC 4 版本
    【解决方案2】:

    Try this slick way to do it.

    它增加了从操作中排除控制器级别过滤器的功能。

    [ExcludeFilter(typeof(AuthorizeAttribute)]  
    public ActionMethod DontAuthorize.....
    

    容易多了!

    【讨论】:

      【解决方案3】:

      您也可以创建自己的 AllowWithoutAuthorisation 属性并用它装饰 ActionResult。

      编辑 这有点未经测试,但你不能这样做;

      [Authorize(Users="*")]
      

      编辑 2

      或者你可以用 [Authorise] 装饰每个 ActionResult 并省略你不想授权的那个。

      【讨论】:

      • 这些都不起作用,因为控制器上的 Authorize 属性即使在 Action 运行后也会运行。
      • 我用过[AllowAnonymous]
      【解决方案4】:

      好的,我知道了。

      我所做的是,我为该操作创建了一个单独的控制器,并在我的 web.config 中添加了一个 location 元素以允许匿名访问该操作。

      这将允许所有访问该控制器而无需身份验证。

      【讨论】:

        【解决方案5】:

        在方法中添加 [AllowAnonymous] 属性(由 Jeremy 推荐)也对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-28
          • 2010-12-18
          • 2012-03-01
          • 2013-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多