为不同的ASP.NET MVC 3区域提供不同的登录页面

eff*_*kay 20 .net asp.net asp.net-mvc asp.net-membership asp.net-mvc-3

我可以为不同的ASP .NET MVC3区域提供不同的登录URL吗?

例如,我想为管理员和数据输入操作员提供不同的登录页面.

我在每个区域的视图部分看到一个web.config,我尝试过:

<authentication mode="Forms">
    <forms loginUrl="~/Administration/Account/LogOn" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

但它不能很好地发挥作用.

干杯.

Dav*_*enn 28

我不知道.NET会为你处理这个问题,但是你可以创建一个自定义的AuthorizationAttribute

public class CustomAuthorization : AuthorizeAttribute {

  public string Url { get; set; }

  public override void OnAuthorization(AuthorizationContext filterContext) {

    if (!filterContext.HttpContext.User.Identity.IsAuthenticated) {
      filterContext.HttpContext.Response.Redirect(Url);
    }
    base.OnAuthorization(filterContext);

  }

}
Run Code Online (Sandbox Code Playgroud)

添加到您的控制器/操作

[CustomAuthorization(Url="/Area/Login")]
public class HomeController {
  //...
}
Run Code Online (Sandbox Code Playgroud)


nel*_*oro 9

我的解决方案基于David Glenn提出的解决方案,谢谢.

public class CustomAuthorization : AuthorizeAttribute
{
    public string Url { get; set; }

    // redirect to login page with the original url as parameter.
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult(Url + "?returnUrl=" + filterContext.HttpContext.Request.Url.PathAndQuery);
    }
}
Run Code Online (Sandbox Code Playgroud)

并将属性添加到您的控制器/操作

[CustomAuthorization(Url="/Area/Login")]
public class HomeController {
  //...
}
Run Code Online (Sandbox Code Playgroud)

最好使用filterContext.Result而不是filterContext.HttpContext.Response.Redirect(Url)进行重定向,因为当前过滤器会立即重定向到登录页面,否则原始操作将被调用,然后才会重定向到登录页面.