.NET 6 Web API中IStringLocalizer无法读取资源文件问题求助
.NET 6 Web API 本地化资源无法加载问题
已完成的配置
1. Startup.cs 配置
services.AddLocalization(options => options.ResourcesPath = "Resources"); services.AddControllersWithViews() .AddViewLocalization(LanguageViewLocationExpanderFormat.SubFolder) .AddDataAnnotationsLocalization(); services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { "fr-BE", "nl-BE" }; options.SetDefaultCulture(supportedCultures[0]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); });
2. 资源文件结构
资源文件存放于Resources\Controllers\目录下:
MyController.fr-BE.resx:键Article对应值Article FRMyController.nl-BE.resx:键Article对应值Article NL
3. 控制器代码
private readonly IStringLocalizer<MyController> _localizer; public MyController(IStringLocalizer<MyController> localizer) { _localizer = localizer; } public ActionResult Get() { var article = _localizer["Article"]; return Ok(); }
问题现象
调用接口时,article变量显示资源未找到:
Name = "Article" ResourceNotFound = true article.SearchedLocation = API.Resources.Controllers.MyController Value = "Article"
请求已通过Postman携带Accept-Language = fr-BE头。
缺失的配置与修复步骤
添加请求本地化中间件
在Startup.cs的Configure方法中,必须将请求本地化中间件加入管道,放在UseRouting之后、UseAuthorization之前:app.UseRouting(); // 新增该行代码 app.UseRequestLocalization(); app.UseAuthorization(); app.MapControllers();这是核心缺失步骤,没有它系统不会解析请求头的语言信息,无法切换对应本地化文化。
替换AddControllersWithViews为AddControllers
Web API不需要视图本地化功能,修改服务注册代码:services.AddControllers() .AddDataAnnotationsLocalization();检查资源文件属性
右键资源文件→属性:- 设置复制到输出目录为
如果较新则复制或始终复制 - 确认自定义工具为
ResXFileCodeGenerator,确保资源类能正确生成
- 设置复制到输出目录为
验证资源文件命名空间
资源文件生成的类命名空间需与SearchedLocation(API.Resources.Controllers)一致,若不一致,可修改资源文件的自定义工具命名空间属性,或调整资源文件目录结构匹配控制器命名空间。
内容的提问来源于stack exchange,提问作者TheBoubou
相关产品推荐
相关产品推荐

