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)
我的解决方案基于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)进行重定向,因为当前过滤器会立即重定向到登录页面,否则原始操作将被调用,然后才会重定向到登录页面.
| 归档时间: |
|
| 查看次数: |
7873 次 |
| 最近记录: |