Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将区域性设置为用户为登录页面选择的区域性?_C#_Asp.net Mvc_Authentication_Localization - Fatal编程技术网

C# 如何将区域性设置为用户为登录页面选择的区域性?

C# 如何将区域性设置为用户为登录页面选择的区域性?,c#,asp.net-mvc,authentication,localization,C#,Asp.net Mvc,Authentication,Localization,我们网站的某些区域需要身份验证才能访问 我们的网站可以选择从任何页面选择用户的首选语言 由于某些原因,当重定向到登录页面时,即使选择了语言,该语言也会在登录页面上设置为默认语言 例如,如果用户位于索引页面(允许匿名),并选择法语作为其语言,然后选择转到DB门户(需要登录),则会将其转到默认语言登录页面(英语)。登录后的语言是否正确 应该发生的是:用户应该被重定向到以其所选语言显示的登录页面 如果在登录页面上选择语言,则登录页面会更改语言 这是登录的配置: 进行本地化 出于某种原因,即使语言是先前

我们网站的某些区域需要身份验证才能访问

我们的网站可以选择从任何页面选择用户的首选语言

由于某些原因,当重定向到登录页面时,即使选择了语言,该语言也会在登录页面上设置为默认语言

例如,如果用户位于索引页面(允许匿名),并选择法语作为其语言,然后选择转到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;
//完成下面剩下的登录工作
// ...
返回视图();
}