ASP.NET MVC 5 中的 DefaultThreadCurrentCulture 完整请求
Posted
技术标签:
【中文标题】ASP.NET MVC 5 中的 DefaultThreadCurrentCulture 完整请求【英文标题】:DefaultThreadCurrentCulture in ASP.NET MVC 5 Full Request 【发布时间】:2014-10-16 17:37:27 【问题描述】:在我们的 ASP.NET MVC 5 项目中,我们根据 cookie 的值设置 主线程的文化,以便完整的请求在相同的文化下运行。
我们想开始使用 Async 支持。如果我们在 Request 启动时设置 DefaultThreadCurrentCulture,这是否会导致 this 上的所有线程,并且只有这个,Request 以定义的文化运行?
网站流量很大,所以我担心如果我使用 DefaultThreadCurrentCulture 会影响其他用户的请求,因为他们的请求同时进入。
My BaseController
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
string defaultCulture = "fr-CA"; //From Cookie in reality
// Modify current thread's cultures
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.DefaultThreadCurrentCulture= Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.DefaultThreadCurrentUICulture= Thread.CurrentThread.CurrentCulture;
return base.BeginExecuteCore(callback, state);
【问题讨论】:
可能重复这个 - ***.com/questions/20601578/… 【参考方案1】:我有坏消息、好消息和坏消息。
坏消息
首先,新的 4.5 属性 DefaultThreadCurrentCulture
和 DefaultThreadCurrentUICulture
显然是全局设置,而不是每个请求的设置。请注意,反射的代码没有显示ExecutionContext
或CallContext
的迹象:
[__DynamicallyInvokable]
public static CultureInfo DefaultThreadCurrentCulture
[__DynamicallyInvokable]
get
return CultureInfo.s_DefaultThreadCurrentCulture;
[__DynamicallyInvokable]
[SecurityPermission(SecurityAction.Demand, ControlThread=true)]
[SecuritySafeCritical]
set
CultureInfo.s_DefaultThreadCurrentCulture = value;
[__DynamicallyInvokable]
public static CultureInfo DefaultThreadCurrentUICulture
[__DynamicallyInvokable]
get
return CultureInfo.s_DefaultThreadCurrentUICulture;
[__DynamicallyInvokable]
[SecurityPermission(SecurityAction.Demand, ControlThread=true)]
[SecuritySafeCritical]
set
if (value != null)
CultureInfo.VerifyCultureName(value, true);
CultureInfo.s_DefaultThreadCurrentUICulture = value;
好消息
幸运的是,自定义 ASP.NET AspNetSynchronizationContext apparently handles CultureInfo 使其确实如您所愿地在线程之间流动。
不过……
坏消息
有一个bug identified with AspNetSynchronizationContext,如果它仍未修复,则表明“流动” CultureInfo 的机制可能不稳定。
【讨论】:
以上是关于ASP.NET MVC 5 中的 DefaultThreadCurrentCulture 完整请求的主要内容,如果未能解决你的问题,请参考以下文章
我们是不是正在使用 .Net 3.5 中的 MVC 框架转向经典 ASP?
ASP.NET 5 MVC 6 RC1 API 中的自定义模型绑定异常