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

ASP.NET Web应用切换页面后小数分隔符从逗号变回点的原因咨询

问题成因及解决方案

你遇到的问题核心在于直接在Program.cs启动时设置CultureInfo.CurrentCulture仅对启动线程生效,无法覆盖ASP.NET Core中每个请求的线程文化,具体成因分以下几点:

  • 线程上下文隔离:ASP.NET Core为每个请求分配独立的线程(或线程池线程),启动时设置的文化是初始线程的属性,后续请求的线程不会继承这个设置,默认会使用系统或框架的默认文化(通常是en-US,小数分隔符为点)。
  • 请求文化自动检测:框架默认启用了RequestLocalizationMiddleware的文化提供程序,会从请求的Accept-Language头、Cookie或查询参数中读取文化设置。如果客户端发送的请求头包含其他文化(比如en-US),框架会自动切换到对应文化,覆盖你启动时的设置。
  • 中间件顺序错误:如果你的文化设置代码没有放在正确的中间件位置,比如在UseRouting()或UseEndpoints()之后,无法对后续请求的文化处理产生影响。

正确的解决方案

要全局强制所有页面使用nl-NL文化,应该使用ASP.NET Core的本地化中间件来配置,而不是直接设置线程文化:

  1. 在Program.cs中配置请求本地化选项:
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var dutchCulture = new CultureInfo("nl-NL");
    options.DefaultRequestCulture = new RequestCulture(dutchCulture);
    options.SupportedCultures = new[] { dutchCulture };
    options.SupportedUICultures = new[] { dutchCulture };

    // 若要完全忽略客户端请求头的文化,清空默认的文化提供程序
    options.RequestCultureProviders.Clear();
});
  1. 在中间件管道中添加本地化中间件,注意要放在UseRouting()之前:
app.UseRequestLocalization();
app.UseRouting();
// 其他中间件...

这样配置后,所有请求都会强制使用nl-NL文化,小数分隔符会保持为逗号,不会随页面切换而变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:35:25