asp.net mvc 同一个项目支持不同的登录页面
钢翼
编程
一般来说一个mvc项目只有一个登录页面,通过web.config可以方便的进行配置。
<authentication mode="Forms"> <forms loginUrl="~/Account/Login" protection="All" path="/" timeout="30" cookieless="UseCookies" /> </authentication>
但假设我们将用户前台系统和后台管理系统放到同一个mvc项目,只是通过区域(area)来划分时,显然两个系统需要不同的登录页面。
这个时候,我们可以通过重写AuthorizeAttribute的方式来实现不同区域跳转不同的登录页面。
首先我们需要新建一个自定义AuthorizeAttribute。代码如下,网上很多都是重写OnAuthorization,但是这样会导致[AllowAnonymous]失效,所以这里我们重写HandleUnauthorizedRequest。
public class CustomAuthorization : AuthorizeAttribute
{
public string Url { get; set; }
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.HttpContext.Response.Redirect(Url+ "?ReturnUrl="+ filterContext.HttpContext.Server.UrlEncode(filterContext.HttpContext.Request.Url.ToString()));
}
}
}然后再Controller或者Action添加上以下特性
[CustomAuthorization(Url = "/Area/Account/Login")]
这样我们就可以实现在同一个项目跳转不同的登录页面了。