C# 如何将区域性设置为用户为登录页面选择的区域性?
我们网站的某些区域需要身份验证才能访问 我们的网站可以选择从任何页面选择用户的首选语言 由于某些原因,当重定向到登录页面时,即使选择了语言,该语言也会在登录页面上设置为默认语言 例如,如果用户位于索引页面(允许匿名),并选择法语作为其语言,然后选择转到DB门户(需要登录),则会将其转到默认语言登录页面(英语)。登录后的语言是否正确 应该发生的是:用户应该被重定向到以其所选语言显示的登录页面 如果在登录页面上选择语言,则登录页面会更改语言 这是登录的配置:C# 如何将区域性设置为用户为登录页面选择的区域性?,c#,asp.net-mvc,authentication,localization,C#,Asp.net Mvc,Authentication,Localization,我们网站的某些区域需要身份验证才能访问 我们的网站可以选择从任何页面选择用户的首选语言 由于某些原因,当重定向到登录页面时,即使选择了语言,该语言也会在登录页面上设置为默认语言 例如,如果用户位于索引页面(允许匿名),并选择法语作为其语言,然后选择转到DB门户(需要登录),则会将其转到默认语言登录页面(英语)。登录后的语言是否正确 应该发生的是:用户应该被重定向到以其所选语言显示的登录页面 如果在登录页面上选择语言,则登录页面会更改语言 这是登录的配置: 进行本地化 出于某种原因,即使语言是先前
进行本地化
出于某种原因,即使语言是先前设置的,当前区域性也是默认区域性
如何配置路由以使用以前选择的区域性?我当前的解决方案是在本地化的ControllerActivator中设置会话变量。创建
方法,存储会话的区域性,然后在处理程序中为登录请求设置当前区域性:
公共IController创建(RequestContext RequestContext,类型controllerType)
{
string lang=requestContext.RouteData.Values[“language”]作为字符串???\u DefaultLanguage;
if(lang!=\u DefaultLanguage)
{
尝试
{
Thread.CurrentThread.CurrentCulture=
Thread.CurrentThread.CurrentUICulture=新的文化信息(lang);
//将区域性存储在此处的会话中
requestContext.HttpContext.Session[“区域性”]=Thread.CurrentThread.CurrentCulture;
}
捕获(例外)
{
抛出新的NotSupportedException(string.Format(“错误:无效的语言代码“{0}.”,lang));
}
}
返回DependencyResolver.Current.GetService(controllerType)作为IController;
}
公共操作结果登录(UserLogin user=null,字符串ReturnUrl=“/”)
{
Thread.CurrentThread.CurrentCulture=
Thread.CurrentThread.CurrentUICulture=会话[“区域性”]作为CultureInfo;
//完成下面剩下的登录工作
// ...
返回视图();
}
我当前的解决方案是在本地化的ControllerActivator中设置会话变量。创建方法,存储会话的区域性,然后在处理程序中为登录请求设置当前区域性:
公共IController创建(RequestContext RequestContext,类型controllerType)
{
string lang=requestContext.RouteData.Values[“language”]作为字符串???\u DefaultLanguage;
if(lang!=\u DefaultLanguage)
{
尝试
{
Thread.CurrentThread.CurrentCulture=
Thread.CurrentThread.CurrentUICulture=新的文化信息(lang);
//将区域性存储在此处的会话中
requestContext.HttpContext.Session[“区域性”]=Thread.CurrentThread.CurrentCulture;
}
捕获(例外)
{
抛出新的NotSupportedException(string.Format(“错误:无效的语言代码“{0}.”,lang));
}
}
返回DependencyResolver.Current.GetService(controllerType)作为IController;
}
公共操作结果登录(UserLogin user=null,字符串ReturnUrl=“/”)
{
Thread.CurrentThread.CurrentCulture=
Thread.CurrentThread.CurrentUICulture=会话[“区域性”]作为CultureInfo;
//完成下面剩下的登录工作
// ...
返回视图();
}