Blazor WebAssembly如何读取Razor类库中的JSON静态文件
你遇到的异常本质是注入的HttpClient实例未配置BaseAddress,无法解析相对路径请求,和静态资源路径本身的写法关联不大,可按以下步骤排查修复:
- 修复HttpClient配置
打开你的Blazor WASM主项目的Program.cs文件,确认存在以下HttpClient注册逻辑(项目模板默认自带,若手动修改过注册逻辑可能会丢失):
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
这段配置会让所有通过依赖注入拿到的HttpClient默认以当前应用的根地址作为请求前缀,和模板里读取自带weather.json的逻辑完全一致。
- 确认静态资源请求路径写法正确
Razor类库的wwwroot下的静态资源,访问路径固定为_content/[类库的程序集名称]/[文件路径],你最开始的写法逻辑是对的,不要去掉_content前缀,去掉后会默认去主项目的wwwroot目录查找文件,找不到会报404。
示例正确写法(假设你的Razor类库程序集名为My.Shared.Lib):
protected async override Task OnInitializedAsync() { // 路径里替换为你自己的类库程序集名,不要保留占位符 MenuItems = await Http.GetFromJsonAsync<List<MenuItem>>("_content/My.Shared.Lib/sitemap.json"); await base.OnInitializedAsync(); }
- 验证Razor类库的静态资产配置
如果配置完上面两步还是报错,检查Razor类库的配置:
- 确认
sitemap.json确实放在类库的wwwroot根目录下 - 右键点击
sitemap.json,查看属性,确认「生成操作」是内容,「复制到输出目录」是如果较新则复制(新版.NET SDK放在wwwroot下的文件默认就是这个配置,不需要手动改,如果你手动改了文件属性要改回来) - 可以直接在浏览器地址栏输入
{你的应用根地址}/_content/[类库程序集名]/sitemap.json,如果能正常返回JSON内容,说明静态资源配置没有问题。
内容的提问来源于stack exchange,提问作者Mike T.
相关产品推荐
相关产品推荐

