2012-03-15 61 views
26

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

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

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

回答

43

在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 
    } 
} 
+0

:如果是这种情况,为什么我看不到我的Register.cshtml。当我只是启用表单身份验证。 – JED 2012-03-15 20:33:02

+0

@JED不确定,您可能需要用更多的上下文来补充您的问题才能解决问题。你有任何错误,或者当你尝试访问你的注册视图时会发生什么? – 2012-03-15 20:40:48

+0

我想我知道问题是什么。我拒绝所有用户在我的配置中访问 – JED 2012-03-15 20:48:13

3

在Web.config我有以下授权

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

这将导致

[AllowAnonymous] 

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

[Authorize] 

之前申报的类,才能正常工作。

+0

谢谢,这是唯一对我有用的东西!非常感谢 – 2017-10-04 14:13:42

+0

不客气,我希望这些信息对更多开发者有用。 – 2017-10-24 19:01:46

相关问题