.NET 7 ASP.NET Core部署Azure后默认货币为美元,如何修改为英镑?
问题原因与解决方案
你配置的RequestLocalizationOptions仅作用于请求上下文相关的区域场景(比如MVC视图渲染、模型验证信息等),但直接调用ToString("C")时,若未显式指定Culture,会使用当前线程的默认Culture。Azure App Service的系统默认线程Culture通常为en-US,因此会显示美元符号。
解决方法
1. 设置全局线程默认Culture
在应用启动代码中(Program.cs或Startup.cs)添加全局Culture配置,确保所有线程默认使用en-GB:
var enGbCulture = new CultureInfo("en-GB"); // 设置线程默认的区域和UI区域 CultureInfo.DefaultThreadCurrentCulture = enGbCulture; CultureInfo.DefaultThreadCurrentUICulture = enGbCulture;
如果使用.NET 7顶级语句的Program.cs,可放在var builder = WebApplication.CreateBuilder(args);之后。
2. 启用RequestLocalization中间件
确保在Configure方法中启用请求本地化中间件(若尚未添加),让请求层面的区域设置生效:
app.UseRequestLocalization();
3. 配置Azure App Service应用设置
在Azure门户的App Service控制台中,进入配置 > 应用设置,添加以下配置项:
WEBSITE_DEFAULT_LOCALE=en-GBDOTNET_CULTURE=en-GB
该配置会直接覆盖Azure环境的默认区域设置。
4. 显式指定Culture调用ToString
如果仅需在特定场景显示英镑,可直接在调用时指定Culture:
decimal amount = 100.50m; string poundAmount = amount.ToString("C", new CultureInfo("en-GB"));
内容的提问来源于stack exchange,提问作者WooHoo
相关产品推荐
相关产品推荐

