2011-05-06 72 views
20

我可以爲不同的ASP .NET MVC3區域提供不同的登錄URL嗎?爲不同的ASP.NET MVC 3區域提供不同的登錄頁面

例如我想爲管理員和數據輸入操作員提供不同的登錄頁面。

我看到各個區域的觀點,部分web.config中,我曾嘗試這樣做:

<authentication mode="Forms"> 
    <forms loginUrl="~/Administration/Account/LogOn" timeout="2880" /> 
</authentication> 

,但它並沒有打好。

乾杯。

+0

好奇心越來越好,謹慎分享您需要這樣做的特定原因? – 2011-05-06 13:07:56

+0

需要將超級管理員登錄/完整界面與其他用戶分開 - 我爲所有角色使用單獨的區域; – effkay 2011-05-13 13:33:52

回答

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); 

    } 

} 

的商品添加到您的控制器/行動

[CustomAuthorization(Url="/Area/Login")] 
public class HomeController { 
    //... 
} 
+0

Wohoo ...我嚴格考慮這些行......讓我看看我是否能夠對它進行排序......如果我能夠,你會得到你的觀點:) – effkay 2011-05-06 12:13:48

+0

HandleUnauthorizedRequest不會被覆蓋是一個更好的地方來處理這個問題? – 2012-08-08 07:07:26

8

我的解決方案是基於大衛格倫提出的解決方案,謝謝。

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); 
    } 
} 

和屬性添加到您的控制器/行動

[CustomAuthorization(Url="/Area/Login")] 
public class HomeController { 
    //... 
} 

比filterContext.HttpContext.Response.Redirect(URL)更好地利用filterContext.Result重定向,因爲當前的過濾器將立即重定向到登錄頁面,否則原來的行動將被調用,只有然後重定向到登錄頁面。

+0

這真的很有幫助 – Ever 2014-03-16 13:57:20

+0

這樣比較好。 – Diryboy 2014-06-05 03:43:29

相關問題