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

ASP.NET Core中UseRequestLocalization多参数默认文化失效问题

解决ASP.NET Core 7多语言API默认文化优先问题

问题出在你仅指定了支持的文化列表,但未明确设置默认请求文化。默认情况下,UseRequestLocalization若只传入SupportedCultures数组,会以系统默认文化而非列表首个文化作为降级选项,当客户端发送的Accept-Language头匹配到你支持的其他文化时,就会优先使用该匹配项,导致你看到“第一个参数不生效”的情况。之前2个参数时看似正常,大概率是巧合——比如系统默认刚好是第一个,或客户端Accept-Language头刚好匹配第一个。

修正方案

修改Program.cs中的本地化配置,显式指定DefaultRequestCulture为支持列表的首个文化,同时正确初始化SupportedCultures和SupportedUICultures:

var supportedCultures = new[] { "it", "el", "ka", "ru" };
var defaultCulture = supportedCultures[0];

app.UseRequestLocalization(options =>
{
    // 强制默认使用列表第一个文化
    options.DefaultRequestCulture = new RequestCulture(defaultCulture, defaultCulture);
    // 初始化支持的文化集合
    options.SupportedCultures = supportedCultures.Select(c => new CultureInfo(c)).ToList();
    options.SupportedUICultures = supportedCultures.Select(c => new CultureInfo(c)).ToList();
});

可选进阶配置

如果想完全忽略客户端Accept-Language头,强制只用默认首个文化(无论客户端发送什么头,仅在URL参数指定时才切换),可以移除默认的AcceptLanguageHeaderRequestCultureProvider:

options.RequestCultureProviders.Remove(
    options.RequestCultureProviders.OfType<AcceptLanguageHeaderRequestCultureProvider>().First()
);

验证要点

  • 客户端未发送Accept-Language头,或发送的头无匹配支持文化时,会自动使用你设置的首个文化。
  • 通过?culture=xx&ui-culture=xx指定文化的逻辑不受影响,依然正常生效。

注:你的资源文件配置(TempResource.resx设为public)是正确的,无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:33:28