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

ASP.NET Core 7.0中IStringLocalizer资源文件路径配置求助

ASP.NET Core 7.0 Identity Login页面IStringLocalizer资源文件存放方案

针对你遇到的IStringLocalizer无法定位.resx文件的问题,核心要匹配目标类的命名空间与资源文件的目录结构,结合ASP.NET Core本地化的默认查找规则,给出以下两种可行方案:


方案1:绑定LoginModel的专属资源

如果你的IStringLocalizer是注入到LoginModel中使用(如private readonly IStringLocalizer<LoginModel> _localizer;),需严格遵循以下规则:

  1. 确认LoginModel的命名空间:默认生成的LoginModel命名空间为你的项目名.Areas.Identity.Pages.Account
  2. 创建对应目录结构:在项目根目录的Resources文件夹下,建立与命名空间完全匹配的层级:
    Resources
    └── Areas
        └── Identity
            └── Pages
                └── Account
                    ├── LoginModel.resx          # 默认语言资源
                    └── LoginModel.zh-CN.resx    # 中文本地化资源(按需添加其他语言)
    
  3. 验证项目配置:确保.csproj中已将资源文件设置为嵌入式资源:
    <ItemGroup>
      <EmbeddedResource Include="Resources/**/*.resx" />
    </ItemGroup>
    
    同时在Program.cs/Startup.cs中指定资源根路径:
    builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
    

方案2:使用Identity共享资源类

若需要多个Identity页面共用一套本地化资源,可创建共享资源类:

  1. 创建共享资源类:在Areas/Identity目录下新建空类IdentitySharedResource.cs(无需任何代码),命名空间为你的项目名.Areas.Identity
  2. 存放资源文件:在Resources/Areas/Identity目录下创建对应资源文件:
    Resources
    └── Areas
        └── Identity
            ├── IdentitySharedResource.resx
            └── IdentitySharedResource.zh-CN.resx
    
  3. 注入使用:在LoginModel中注入IStringLocalizer<IdentitySharedResource>,通过_localizer["Key"]调用文本

排查要点

  • 清理项目并重新生成,避免缓存导致资源未加载
  • 确保资源文件名与类名完全一致(大小写敏感)
  • 验证本地化中间件配置是否包含Razor Pages支持:
    builder.Services.AddRazorPages()
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
        .AddDataAnnotationsLocalization();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:40:01