在VS dev服务器和IIS上设置ASP.NET MVC应用程序的文化

dyg*_*ygo 46 c# iis asp.net-mvc

这是这个问题的更具体和更清晰的版本 - 开发和测试环境的不同DateTimeFormat

在我的ASP.NET MVC项目中的global.asax.cs 的Application_BeginRequest()方法中有代码:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
Run Code Online (Sandbox Code Playgroud)

当我在Controller Action上设置断点时,我看到Thread.CurrentThread.CurrentCulture的以下值:

  1. 在VS dev服务器 - "en-GB"
  2. 在IIS中 - "en-US"

问题是 - IIS中的哪些设置对此负责,如何覆盖它?

vcs*_*nes 125

您可以在web.config中指定它,而不是设置Thread的文化,如下所示:

<configuration>
    <system.web>
        <globalization uiCulture="en-GB" culture="en-GB" />
    </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这是在ASP.NET中指定文化的更"恰当"的方式.


dyg*_*ygo 19

好吧,我实际上并没有找到IIS设置的责任,但我已经在Application_PreRequestHandlerExecute()中重写了它,它终于工作了:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 6

我认为让客户端(即用户代理/浏览器)决定他想要的文化是一个很好的选择.这可以通过将web.config中元素的cultureand uiCulture属性设置为来完成.请参阅"版本1".globalizationauto

您还可以执行以下操作:执行broswers设置,但如果不可能则使用en-US后备值.请参阅"版本2".

版本1:

<configuration>
   <system.web>    
      <globalization culture="auto" uiCulture="auto"/>
   </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

版本2:

<configuration>
   <system.web>    
       <globalization culture="auto:en-US" uiCulture="auto:en-US" />
   </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)


有关详细信息,请参阅此文章:基于浏览器区域设置自动检测和设置ASP.NET区域设置