【问题标题】:How to allow an anonymous user access to some given page in MVC?如何允许匿名用户访问 MVC 中的某个给定页面?
【发布时间】:2012-03-15 20:17:36
【问题描述】:

我在我的 ASP.NET MVC Web 应用程序中启用了表单身份验证。我想只允许匿名用户访问某些特定页面,例如 Register.cshtml。通过这样做,我能够允许从我的根 web.config 访问我的 CSS 文件。

<location path="Content/Site.css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

现在我想允许匿名访问其他页面,例如主页和注册。有没有人知道如何做到这一点?

【问题讨论】:

    标签: c# asp.net-mvc forms-authentication


    【解决方案1】:

    在 MVC 中,您通常使用 [Authorize] 属性来管理授权。带有该属性的控制器或单个操作将要求用户获得授权才能访问它们 - 所有其他操作将对匿名用户可用。

    换句话说,一种黑名单方法,其中需要授权的操作被使用[Authorize] 的匿名用户列入黑名单 - 所有操作(未使用该属性)都将可用。

    更新:

    在 MVC4 中引入了一个新属性,即[AllowAnonymous] 属性。与[Authorize] 属性一起,您现在可以采用白名单方法。白名单方法是通过使用[Authorize] 属性修饰整个控制器来实现的,以强制对该控制器内的所有操作进行授权。然后,您可以使用 [AllowAnonymous] 属性来处理不需要授权的特定操作,从而仅将这些操作列入白名单。使用这种方法,您可以放心,您不会意外忘记使用 [Authorize] 进行操作,而让任何人都可以使用它,即使它不应该这样做。

    你的代码可能是这样的:

    [Authorize]
    public class UserController : Controller {
    
       [AllowAnonymous]
       public ActionResult LogIn () {
          // This action can be accessed by unauthorized users
       }
    
       public ActionResult UserDetails () {
          // This action can NOT be accessed by unauthorized users
       }
    }
    

    【讨论】:

    • :如果是这种情况,为什么我看不到我的 Register.cshtml。当我只启用表单身份验证时。
    • @JED 不确定,您可能需要用更多上下文来补充您的问题才能解决这个问题。您是否收到任何错误,或者当您尝试访问您的注册视图时会发生什么?
    • 我想我知道问题出在哪里。我在我的配置中拒绝所有用户访问
    【解决方案2】:

    在 Web.config 中我有以下授权

    <authorization>
        <deny users ="?"/>
    </authorization>
    

    这会导致

    [AllowAnonymous]
    

    无法正常工作,我不得不删除我的 Web.config 的授权,并在所有控制器中放入该行

    [Authorize]
    

    在声明类之前,要正常工作。

    【讨论】:

    • 谢谢,这是唯一对我有用的东西!非常感谢
    • 不客气,希望这些信息对更多开发者有用。
    猜你喜欢
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多