【发布时间】:2021-08-02 22:11:04
【问题描述】:
我正在尝试在一个小型 WebAssemply 应用程序(使用 .NET 5 创建)中测试 HttpClient。 program.cs 包含以下语句来添加 HttpClient 服务:
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
我的测试 Razor 组件的源代码贴在最后。执行语句时发生以下异常:“HttpResponseMessage response = await http.GetAsync(apiUrl)”。使用 http.GetFromJsonAsync 时出现同样的错误。 我能够使用 Web API 从 Blazor Server 应用程序中的同一网站获取数据。出于某种原因,我无法让它在 WebAssembly 应用程序中工作。任何帮助将不胜感激。
错误信息
mono_wasm_start_single_stepping 2 暴击:Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] 未处理的异常渲染组件:TypeError: Failed to fetch System.Net.Http.HttpRequestException:TypeError:无法获取 在 System.Net.Http.BrowserHttpHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancelToken) 在 System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage 请求,HttpCompletionOption 完成选项,布尔异步,布尔 emitTelemetryStartStop,CancellationToken 取消令牌) 在 C:\projects\my_tryout\WebAssemblyUseWebApi\WebAssemblyUseWebApi\Pages\Weather.razor 中的 WebAssemblyUseWebApi.Pages.Weather.OnInitializedAsync():第 27 行 在 Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync() 在 Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(任务 taskToHandle) ==================================================== =============================
源代码
page "/weather"
@inject HttpClient http
<h3>Weather Data</h3>
@if (!string.IsNullOrEmpty(errorMessage))
{
<p>@errorMessage</p>
}
else if (string.IsNullOrEmpty(data))
{
<p>Loading ...</p>
}
else
{
<p>@data</p>
}
@code {
string errorMessage = string.Empty;
public string data;
protected override async Task OnInitializedAsync()
{
string apiUrl = "https://www.metaweather.com/api/location/2471217/";
HttpResponseMessage response = await http.GetAsync(apiUrl);
if (response.IsSuccessStatusCode)
{
data = response.Content.ReadAsStringAsync().Result;
}
else
{
errorMessage = response.ReasonPhrase;
}
}
}
【问题讨论】:
-
发布 full 异常文本,而不仅仅是堆栈跟踪的一部分。不过,
.Result是一个错误。OnInitializedAsync是异步方法,ReadAsStringAsync也是。使用await response.Content.ReadAsStringAsync();
标签: httpclient blazor blazor-webassembly