2012-04-19 118 views
2

僅供參考 - 這不是MVC。路由與ASP.NET Web窗體與窗體身份驗證

我使用Web表單認證,並已在我的web.config以下。

<authentication mode="Forms"> 
    <forms loginUrl="~/en/Admin/Login" timeout="2880" defaultUrl="/DashBoard" /> 
</authentication> 

我也使用路由雙語/文化。

我的路線是這樣的:

RouteTable.Routes.MapPageRoute(
    routeName, "{lang}/Admin/Login", "/Admin/Login.aspx", true, defaults, constraints, dataTokens); 

如果用戶試圖訪問受限制的網頁登錄設在web.config中的價值,他們將被重定向到/ EN /管理/。我的問題是,如果用戶正在用法語查看網站,那麼當頁面需要重定向到/ fr/Admin/Login時,該頁面會重定向到英文登錄頁面。

有沒有解決這個任何方式作爲整個網站需要雙語?

+0

我發現有一些變通的類似問題,但沒有真正的解決方案。 http://stackoverflow.com/questions/356982/how-to-redirect-to-a-dynamic-login-url-in-asp-net-mvc – PsychoDUCK 2012-04-19 20:02:34

回答

0

,我發現有一些變通的類似問題,但沒有真正的解決方案。 How to redirect to a dynamic login URL in ASP.NET MVC

這裏是我的解決方案:

1)我添加了一個會話變量來跟蹤用戶選擇什麼樣的語言。 (例如:會話[ 「郎」] = 「FR」)

2)我在我的登錄頁面/admin/default.aspx在web.config象下面這樣:

<authentication mode="Forms"> 
    <forms loginUrl="~/Admin/Default.aspx" timeout="2880" defaultUrl="/en/DashBoard" /> 
</authentication> 

3)在我的/admin/default.aspx的頁面加載事件我確定使用會話中的語言設置了哪種語言並重定向到了實際的登錄頁面。

if (HttpContext.Current.User.Identity.IsAuthenticated) 
     // Redirect to dashboard 
     ... 
    else 
    { 
     string returnUrl = ""; 
     if (Request.QueryString["ReturnUrl"] != null) 
      returnUrl = "?ReturnUrl=" + Request.QueryString["returnUrl"].ToString(); 

     string selectedLanguage = ""; 
     if (Session["lang"] != null) 
      selectedLanguage = Session["lang"].ToString(); 
     else 
      selectedLanguage = "en"; 

     string loginURL = ConfigurationManager.AppSettings["Auth.LoginUrl"].ToString(); 
     loginURL = loginURL.Replace("{lang}", selectedLanguage); 

     Response.Redirect(loginURL + returnUrl);     
    } 
0

在默認(EN //管理/登入)頁面,解析引用URL,並根據需要重定向。 (假設區域設置在網站上通過在URL路徑培養標記確定的。)例如,

var referrer = Request.QueryString["ReturnUrl"]; 
if (!string.IsNullOrEmpty(referrer)) 
{ 
    if (!referrer.Contains("/Admin/Login")) 
    { 
     if (referrer.Contains("/fr/")) Response.Redirect("/fr/Admin/Login"); 
     else if (referrer.Contains("/de/")) Response.Redirect("/de/Admin/Login"); 
     // etc. 
    } 
} 

當然可以改進/通過使用正則表達式來解析引薦和檢查對有效區域設置簡化。

+0

Request.UrlReferrer總是空。我不確定這是否是最佳解決方案。看起來像一個黑客。 – PsychoDUCK 2012-04-19 19:46:52

+0

@PsychoDUCK嗯,有趣。儘管我猜測這是有道理的,因爲原始的auth重定向是應用程序內部的。我認爲你仍然可以在查詢字符串中使用RedirectUrl而不是URL引用來使用相同的方法。誠然,這是一種黑客攻擊,但它似乎是給定您的設置的最佳解決方案。 – McGarnagle 2012-04-19 19:50:47

+0

我願意接受建議,希望能有更好的方法。 – PsychoDUCK 2012-04-19 19:52:13