CultureInfo IIS和IIS Express之间的差异

时间:2017-09-21 09:48:09

标签: c# asp.net asp.net-mvc iis

我对特定文化的CultureInfo值有一些问题,“pt-PT”。为了缩小范围,我使用.net框架在VS 2017中创建了一个MVC项目,并在视图About.cshtml中添加了以下行:

<p>@(new System.Globalization.CultureInfo("pt-PT").DateTimeFormat.FirstDayOfWeek)</p>

这是我对visual studio创建的项目所做的唯一更改。

当我使用IIS Express在VS中运行此项目时, FirstDayOfWeek 返回的值为“Monday”。

但是,如果我在IIS中运行此项目(在同一台机器上), FirstDayOfWeek 返回的值为'Sunday'。

我期待价值相同并且是'星期一'。 我对价值观的差异感到困惑,并希望在理解它时有所帮助。

注意:经过进一步测试后,我得出结论,如果我在计算机设置中更改了一周的第一天,则在IIS Express中运行项目时会反映出此更改。我更困惑......我猜这个属性没用......

1 个答案:

答案 0 :(得分:0)

默认情况下,IIS使用DateTimeInfo.InvariantInfo返回FirstDayOfWeek作为其Application_BeginRequest值(也使用美国日期格式)。如果您不确定为什么IIS(而不是Express)使用的文化不同于您使用的文化,请在Global.asax代码中的protected void Application_BeginRequest(object sender, EventArgs e) { string culture = "pt"; if (HttpContext.Current.Request.Path.Contains("pt")) { culture = "pt"; // Portuguese, use 'pt-PT' if not sure } else { // set to other cultures, including invariant (default) one } Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture); } 处理程序中设置区域性信息:

globalization

或者在web.config文件中使用Thread.Culture元素来设置Thread.UICulture&amp; <globalization culture="pt-PT" uiCulture="pt" />

iisreset

如果以上所有设置均无效,请使用以下步骤:

  
      
  1. 打开IIS管理器,选择您的站点并打开“.NET全球化”。
  2.   
  3. 打开“文化”标签,同时设置文化&amp; UI文化部分为葡萄牙语。
  4.   
  5. 重新启动应用程序池或使用NetworkService命令应用所有更改。
  6.   

注意:作为一般惯例,站点不应该依赖服务器的应用程序池设置来按预期的方式使用指定的语言环境/文化。有关文化设置的详细信息,请参阅Set the Culture and UI Culture for ASP.NET Web Page Globalization

另外,请检查应用程序池的区域设置是否设置为关注LocalSystem的用户帐户,如有必要,请将其更改为 <div class="Button"> <a href="javascript:void(0)" class="button yellow-btn addToCart trackEvent" rel="Thebutton" data-action="Tap">Tap this button</a> <div id="ButtonTwo" class="ButtonTest2"> <a href="javascript:void(0)"><p class="MeButton" id="ButtonID">Final button test</p></a></div>

类似问题:

ASP.NET Application is displaying american date formats

How do you set the IIS Application Pool Identity User Locale when it's set to ApplicationPoolIdentity