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.NET MVC 中重定向到动态登录 URL

这是我的解决方案:

1)我添加了一个会话变量来跟踪用户选择的语言。(例如:会话 [“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 回答