如何防止 IIS 覆盖我在 ASP.NET 中设置的文化?

如何防止 IIS 覆盖我在 ASP.NET 中设置的文化?

我有一个美国客户,他希望所有时间都显示为军事时间,但其他一切时间都应该是美国文化。

在我的 global.asax 中,我正在创建美国文化的副本并应用 GB 时间显示来创建具有军事时间的美国文化。

我这样做的原因是我找不到能够做到这一点的文化,但是如果有人知道,那就太好了。

我遇到的问题是,当我们将网站部署到 IIS(版本 6)时,一切似乎都恢复到了美国文化。

查找如何更改文化,我在 ASP.NET 选项卡 -> 编辑配置 -> 应用程序选项卡中找到了设置

默认值为 af-ZA。

似乎没有选项可以禁用这种文化覆盖,而且我不相信 af-ZA 是正确的?

有没有办法防止 IIS 覆盖在 ASP.NET 中以编程方式设置的文化?

注意:在这里提问是因为我正在寻找服务器端解决方案,而不是编程解决方案。谢谢!

答案1

这至少部分是编码问题。基本上,您需要使用 System.Globalization 中的 CultureAndRegionInfoBuilder 类创建并注册您的新文化。

注册后,您可以在 ASP.Net 应用程序设置中选择新的文化。(或在您的应用程序的 web.config 文件中)。

以下是一些可以帮助您入门的参考资料:
http://msdn.microsoft.com/en-us/library/ms172469.aspx
http://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder.aspx

答案2

在与更精通服务器和 asp.net 的人交谈后,我找到了问题的答案

显然,你只能在 Web.config 中设置应用程序范围的文化

我在 global.asax 中的应用程序主线程中设置它,但它不会延续到处理页面请求的子线程。

有趣的是,当通过 Visual Studio 的托管进程在本地机器上运行时,所有请求都必须通过同一个线程完成。

这让我相信这是一个 IIS 问题,因为直到我们把它放到 IIS 上时问题才出现。

我的解决方案:(接受了更合适的解决方案)

必须在每个页面请求线程上设置自定义文化。我的解决方案是将其放入主页加载中。IIS 不会覆盖您的设置。

相关内容