如何为多种语言全球化ASP.Net表单身份验证longinUrl?

时间:2010-07-09 10:10:24

标签: asp.net asp.net-mvc forms-authentication globalization

我希望有人可以帮忙解决这个问题吗?

目前我的ASP.Net MVC网站使用表单身份验证设置如下我的web.config:

<authentication mode="Forms">
  <forms loginUrl="en/User/Signin" timeout="2880" />
</authentication>

我们有一些路由规则使用url中的前缀/ en /作为语言的标识符,但问题是,如果有人访问我们的法语网站www.web.com/fr/Secure/privateData,他们重定向到www.web.com/en/User/Signin,这反过来将文化设置为英语。因此,登录后,用户可能需要将语言更改为法语。

不好!

因此,如果网站需要支持更多语言,那么我需要在网络配置中做这样的事情:

<authentication mode="Forms">
    <%if (isGerman()) { %>
        <forms loginUrl="de/User/Signin" timeout="2880" />
    <%} else if (isFrench()) {%>
        <forms loginUrl="fr/User/Signin" timeout="2880" />
    <%} else { %>
        <forms loginUrl="en/User/Signin" timeout="2880" />
    <% } %>
</authentication>

我知道你在web.config中没有代码,但这只是为了说明我想要实现的目标。任何人都可以提供一个简单的解决方案,或链接到他们可能已经使用的解决方案吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

您不能只根据语言设置全球化一个登录页面并显示语言字符串吗?

否则,您应该使用某种重定向,设置一个登录页面并重定向到正确的页面,具体取决于该页面中的语言设置。但是,您可能需要在配置中添加额外的代码,告知系统登录的语言版本在身份验证模式下不受保护(您可以在web.config中排除/更改站点某些部分的设置)以防止无休止循环。

答案 1 :(得分:1)

我做了一些非常相似的事情,并且有一个基本控制器,可以在正确登录时设置语言。我现在没有代码可以处理,但它有以下几点:

    public string Lang { get; private set; } // at the top of the abstact basecontroller

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        Lang = requestContext.RouteData.Values["lang"].ToString() ?? System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
        ViewData["Lang"] = Lang;

        base.Initialize(requestContext);
    }

然后我根据需要将Lang变量插入到路径中。我会看看我是否可以挖掘出我使用过的代码,但希望上面的内容足以让你了解它。

吉姆