当我们设置Thread CurrentCulture / CurentUICulture时,我们是否会影响ASP.NET中的多个用户?

时间:2010-05-19 07:30:39

标签: asp.net-mvc localization globalization

当我们设置CurrentCulture和/或CurrentUICulture时,我们在当前线程上执行此操作:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");

Doest这意味着我们可能会影响我们Web应用程序的多个用户的文化设置,因为他们的请求可能会重用池中的线程?

我正在开发一个ASP.NET MVC应用程序,其中每个用户可能在他/她的帐户数据中指定了自己的文化设置。当用户登录时,将从数据库中检索文化设置,并且必须将其设置为当前文化。

我担心在当前线程上设置当前文化可能会影响重用此线程的其他用户请求。我更关心的是读这个:

ASP.NET not only uses a thread pool, but may switch threads during request processing.

2 个答案:

答案 0 :(得分:6)

Rocky Lhotka blogged about this very question几年前 - 据报道Scott Guthrie告诉他:

  

ASP.NET确保即使它们也是如此   切换你的线程,   当前的主要文化   来自原始线程的属性   继续前进到新的主题。这个   是自动的,你不需要   担心失去这些价值观。呼!

     

但是,线程本地存储无法继续使用。

本文包含更多有趣的内容(他概述了ASP.NET 切换线程的情况 - 至少截至2006年),这绝对值得一读。不幸的是,Rocky没有提供权威来源的链接。反射器在这里也没有太大帮助,因为所有相关方法都以本机调用终止。

话虽如此,它是有道理的:API强烈暗示当前文化是跨越上下文切换,如当前主体,我从未见过ASP.NET与预期行为相矛盾。

答案 1 :(得分:0)

在标准ASP.NET中,我使用了Page字段UICulture和Culture。然后,在线程上执行请求的不同部分时,线程上下文会被更改。

我说我不熟悉MVC如何管理它,但我认为应该在视图中应用它,并且鉴于视图是从页面继承的视图页面,它们将具有UICulture和Culture作为按照ASP.NET标准......

说到这一切,不要把它当作福音,就像我说的那样,我对ASP MVC做的并不多...