为什么Thread.CurrentThread.CurrentCulture在Page Rendering和HttpModule.PostRequestHandlerExecute之间发生变化?

时间:2010-02-24 20:37:09

标签: c# asp.net-mvc httpmodule

我正在创建一个HttpModule,它需要知道MVC应用程序中设置的Thread.CurrentThread.CurrentCulture的值。该值当前由BaseController设置,但是当我的HttpModule.PostRequestHandlerExecute()方法触发时,它将恢复到文化在页面呈现之前的状态。

我通过使用以下步骤创建一个简单的Web应用程序来重复此操作:

  1. Module.PreRequestHandlerExecute:将文化设置为A
  2. Page_Load:文化目前是A.将文化设置为B
  3. Module.PostRequestHandlerExecute:当前的线程文化是A.我希望它是B,但它在页面呈现和PostRequestHandlerExecute之间被更改
  4. 知道为什么.Net会改变这个价值或者我如何解决这个问题?线程是一样的,所以.Net中的某些东西必须明确地恢复文化。

1 个答案:

答案 0 :(得分:2)

如果您只是为正在运行的线程设置文化,那么任何导致线程切换的操作(例如asp.net中页面生命周期的另一部分)都将导致恢复为默认文化。

推荐的方法是......

http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

本页讨论3个选项......

  1. 为整个应用程序设置文化。
  2. 在页面级别设置文化。
  3. 按请求以编程方式设置文化。
  4. 值得注意的是,任何模块都是作为页面请求的一部分加载的,因此在页面级别更改文化应该为该请求中的所有模块更改它。