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
相关产品推荐
相关产品推荐

