c# - 为什么 Thread.CurrentThread.CurrentCulture 在页面渲染和 HttpModule.PostRequestHandlerExecute 之间会发生变化?

标签 c# asp.net-mvc httpmodule

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

我通过以下步骤创建一个简单的网络应用程序来复制它:

  1. Module.PreRequestHandlerExecute:将文化设置为 A
  2. Page_Load:当前文化为 A。将文化设置为 B
  3. Module.PostRequestHandlerExecute:当前线程文化是 A。我预计它是 B,但它在页面呈现和 PostRequestHandlerExecute 之间发生了变化

知道为什么 .Net 会更改此值或我如何绕过它吗?线程是一样的,所以 .Net 中的某些东西必须明确地恢复文化。

最佳答案

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

推荐的方法在这里...

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

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

  1. 为整个应用设置文化。
  2. 在页面级别设置文化。
  3. 根据请求以编程方式设置文化。

值得注意的是,任何模块都是作为页面请求的一部分加载的,因此在页面级别更改区域性应该会针对该请求的所有模块更改它。

关于c# - 为什么 Thread.CurrentThread.CurrentCulture 在页面渲染和 HttpModule.PostRequestHandlerExecute 之间会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2329306/

相关文章:

c# - 逆变参数?

c# - 将值传递给 Controller ​​中的操作

asp.net-mvc-3 - RoleProvider 不适用于服务器上的自定义 IIdentity 和 IPrincipal

c# - 在 WPF 中打开 ContextMenu 时保留 DataGrid IsSelectionActive?

c# - 如何让 XAML Button Tapped 事件触发所有点击?

javascript - 从外键调用 dbo.Employee 中的 FirstName

c - 使用记事本构建 C 应用程序的自动化工具

c# - 单元测试 IHttpModule 的最佳实践

c# - 在没有属性的类上全局使用 JsonConverter

c# - ViewData 未传递给 View