Asp.net mvc 4 如何使用ASP.NET MVC 4强制用户登录以查看任何内容

Asp.net mvc 4 如何使用ASP.NET MVC 4强制用户登录以查看任何内容,asp.net-mvc-4,forms-authentication,simplemembership,Asp.net Mvc 4,Forms Authentication,Simplemembership,我正在开发一个“ASP.NET MVC 4”应用程序,并使用“SimpleMembershipProvider”。该应用程序将在intranet中使用,未经授权的用户将没有可用的内容,因此我想在允许用户访问实际网站内容之前强制登录 我认为这应该是一个相当琐碎的任务,但这是我第一次必须实现这样的逻辑,我也想用mvc4/simplemebrship风格来实现它,所以我寻求建议 我认为应该首先在web.config中添加以下内容: <authentication mode="Forms">

我正在开发一个“ASP.NET MVC 4”应用程序,并使用“SimpleMembershipProvider”。该应用程序将在intranet中使用,未经授权的用户将没有可用的内容,因此我想在允许用户访问实际网站内容之前强制登录

我认为这应该是一个相当琐碎的任务,但这是我第一次必须实现这样的逻辑,我也想用
mvc4/simplemebrship
风格来实现它,所以我寻求建议

我认为应该首先在web.config中添加以下内容:

<authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="15" slidingExpiration="true" enableCrossAppRedirects="false" protection="All" />
    </authentication>
在我看来,这将是唯一允许匿名的行动。不过,我有点担心将默认路由更改为
Login
,我不确定这是否会导致一些意想不到的缺点

我还想保留由
MVC4 Internet模板创建的默认结构,只留下
主控制器负责的
索引
操作,但我不喜欢这种情况,因为逻辑是明确的-用户必须登录才能获得任何类型的访问,甚至
Home/Index
是我心目中的一种访问方式


那么,如何实施这种行为呢?为了实现此权限,我应该执行哪些基本步骤和更改?

您可以通过将
Authorize
属性注册为全局筛选器来实现这一点。下面是您的
RegisterGlobalFilters
方法的示例:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new AuthorizeAttribute());
}
有了这个功能,您就必须允许匿名用户访问登录页面。为此,请使用
AllowAnonymous
属性对登录操作方法进行注释

[AllowAnonymous]
[HttpGet]
public ActionResult Login()
{
 ...
}
对接收POST请求的登录操作方法执行相同的操作

[AllowAnonymous]
[HttpGet]
public ActionResult Login()
{
 ...
}