Blazor:使用 wwwroot json 文件中的 GetFromJsonAsync 时,提供了无效的请求 URI

Blazor: An invalid request URI was provided when using GetFromJsonAsync from wwwroot json file

提问人:Brad 提问时间:11/9/2023 最后编辑:Tiny WangBrad 更新时间:11/9/2023 访问量:43

问:

在从示例 webassembly 模板中获取代码并将其应用于服务器应用程序时,我正在尝试读取位于 wwwroot 目录中的 json 文件:

{
    forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
}

这样做,我收到“提供了无效的请求 URI”,因此将其更改为使用 http://localhost 地址是有效的,但我试图弄清楚为什么我不能简单地提供如上所示的相对路径。

ASP.net-core blazor httpclient URI

评论

0赞 T.Trassoudaine 11/9/2023
提供相对 URI 时,它将与 HttpClient.BaseAddress 结合使用。您应该检查此值。
0赞 Brad 11/9/2023
当我添加 BaseAddress 以获取 file:// 路径时,我现在收到一个新错误,“不支持'文件'方案”。我是否需要向 HttpClient 添加一些东西以允许 json 文件?
0赞 T.Trassoudaine 11/9/2023
这不是进入本地文件系统的功能,您说它位于 wwwroot 上。如果要继续使用此方法,请继续浏览 http uri。

答:

1赞 Tiny Wang 11/9/2023 #1

我在我这边复制了你的问题。

enter image description here

异常显示我们有一个无效的 url,并且相对部分必须是正确的,所以我尝试检查基本 url。正如你所看到的,在 Web 程序集项目中,它是 url。localhost

enter image description here

但在 blazor server 应用中,我们无法获取基 URL。它。null

enter image description here

因此,我添加了 Program.cs,就像 wsam 项目所做的那样。builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://localhost:7058/") });

测试结果像这样。这次我创建了一个新的服务器项目。enter image description here