2009-05-29 65 views
7

我有一个MVC控制器下面的方法,其重定向到登录页面时未登录用户MVC授权 - 多个登录页面

[Authorize] 
public ActionResult Search() { 
    return View(); 
} 

[Authorize] 
public ActionResult Edit() { 
    return View(); 
} 

是否有一个快速/易/标准方式。将第二个动作重定向到除web.config文件中定义的页面之外的其他登录页面?

还是我必须做的是这样

public ActionResult Edit() { 
    if (IsUserLoggedIn) 
    return View(); 
    else 
    return ReturnRedirect("/Login2"); 
} 

回答

18

我认为这是可能通过创建一个自定义的授权过滤:

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

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      filterContext.HttpContext.Response.Redirect(LoginPage); 
     } 
     base.OnAuthorization(filterContext); 
    } 
} 

在你的行动:

[CustomAuthorization(LoginPage="~/Home/Login1")] 
public ActionResult Search() 
{ 
    return View(); 
} 

[CustomAuthorization(LoginPage="~/Home/Login2")] 
public ActionResult Edit() 
{ 
    return View(); 
} 
+1

很好的解决方案。我不知道你可以做到这一点。 http://www.asp.net/LEARN/mvc/tutorial-14-cs.aspx有一个很好的介绍,为想要解释的人创建自定义动作过滤器。 – 2009-05-30 07:38:20

1

Web.config基于表单的身份验证不具备这样的内置功能一(这适用于WinForms和MVC)。你必须自己处理(通过一个HttpModule或ActionFilter,你所提到的方法或任何其他方法)