You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 9 Razor Pages本地与Azure App Service日期时间格式差异排查

问题分析与解决方案

你的问题核心是本地与Azure App Service上的区域性格式不一致,根源在于Azure环境的默认区域性配置、.NET全球化模式,以及未明确指定格式化时的文化信息。

可能的原因

  1. Azure App Service默认系统区域性并非en-au,即使通过RequestLocalization设置了请求区域性,部分场景下线程文化可能未被正确覆盖。
  2. .NET 5+之后全球化行为变更,默认情况下可能不会自动继承系统区域性,或者应用级的区域性配置未完全生效。
  3. ToString("g")未明确指定文化时,会使用当前线程的文化,若线程文化未正确设置为en-au,就会出现格式偏差。

解决方案

1. 格式化时明确指定区域性

直接在ToString方法中传入en-au文化,确保不受环境影响:

@using System.Globalization

<div class="text-end">
    <div class="fw-semibold text-nowrap">
        <i class="bi bi-clock text-dark"></i>
        @queue.TimeWaiting.ToString("g", CultureInfo.GetCultureInfo("en-au"))
    </div>
    <div class="fs-7">
        @queue.TimeWaiting.Humanize()
    </div>
</div>

2. 全局设置应用级默认区域性

在Program.cs中设置线程默认文化,确保整个应用生命周期内所有线程都使用en-au:

var culture = "en-au";
var supportedCultures = new[] { new CultureInfo(culture) };

// 设置线程默认文化
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(culture);
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo(culture);

app.UseRequestLocalization(new RequestLocalizationOptions
{
    ApplyCurrentCultureToResponseHeaders = true,
    DefaultRequestCulture = new RequestCulture(culture: culture, uiCulture: culture),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});

3. 配置Azure App Service应用设置

在Azure门户的应用服务配置 -> 应用程序设置中添加以下键值对,强制指定应用的区域性:

  • 键:ASPNETCORE_CULTURE,值:en-au
  • 键:ASPNETCORE_UICULTURE,值:en-au

4. 确认.NET全球化模式

在appsettings.json中添加全球化配置,确保禁用不变文化:

{
  "Globalization": {
    "Culture": "en-au",
    "UICulture": "en-au",
    "Invariant": false
  }
}

补充说明

你提到的.NET 5+全球化变更核心是:该版本在某些无系统区域性的环境(如容器)中会默认使用不变文化,而Azure App Service的托管环境可能存在类似情况,导致未显式设置的文化未生效。通过上述步骤可以彻底覆盖环境默认值,确保格式一致。

内容的提问来源于stack exchange,提问作者OjM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:37:43