2

参考までに-これはMVCではありません。

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 / Admin/Loginにリダイレクトされます。私の問題は、ユーザーがフランス語でサイトを表示している場合、/ fr / Admin / Loginにリダイレクトする必要があるときに、ページが英語のログインページにリダイレクトされることです。

サイト全体がバイリンガルである必要があるため、これを回避する方法はありますか?

4

2 に答える 2

0

いくつかの回避策で同様の問題を見つけましたが、真の解決策はありません。 ASP.NETMVCで動的ログインURLにリダイレクトする方法

これが私の解決策です:

1)ユーザーが選択した言語を追跡するために、セッション変数を追加しました。(例:Session ["lang"] = "fr")

2)以下のようにweb.configにログインページ/admin/default.aspxを作成しました。

<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);                
    }
于 2012-04-20T14:13:20.823 に答える
0

デフォルトの(en // admin / login)ページで、参照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.
    }
}

もちろん、正規表現を使用してリファラーを解析し、有効なロケールと照合することで、改善/簡素化できます。

于 2012-04-19T19:28:19.353 に答える