2009-05-29 109 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,你所提到的方法或任何其他方法)