如何允许匿名用户访问MVC中的某个给定页面?

Joh*_*uru 31 c# asp.net-mvc forms-authentication

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

<location path="Content/Site.css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

现在我想允许匿名访问其他页面,如Home和Register.有人知道如何实现这个目标吗?

Chr*_*son 50

在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
   }
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*les 7

在Web.config中,我有以下授权

<authorization>
    <deny users ="?"/>
</authorization>
Run Code Online (Sandbox Code Playgroud)

这导致了

[AllowAnonymous]
Run Code Online (Sandbox Code Playgroud)

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

[Authorize]
Run Code Online (Sandbox Code Playgroud)

在宣布课程之前,要正常工作.

  • 谢谢,这是唯一对我有用的东西!非常感谢 (2认同)