Blazor 服务器端和 Blazor WebAssembly 中 HttpClient 的机制是有所不同的。在 Blazor 服务器端中,HttpClient 是直接在服务器端执行的,而在 Blazor WebAssembly 中,HttpClient 是在 WebAssembly 运行时环境中执行的。
以下是针对两种情况的解决方法和代码示例:
@inject HttpClient httpClient
@code {
private string response;
protected override async Task OnInitializedAsync()
{
response = await httpClient.GetStringAsync("https://api.example.com/data");
}
}
在上述示例中,我们通过注入 HttpClient 对象来发送 GET 请求并获取响应的字符串。
首先,在 Blazor WebAssembly 的 index.html 文件中添加一个 JavaScript 函数:
然后,在 Blazor 组件中使用 JavaScript 互操作性功能调用该函数,如下所示:
@inject IJSRuntime jsRuntime
@code {
private string response;
protected override async Task OnInitializedAsync()
{
response = await jsRuntime.InvokeAsync("sendHttpRequest", "https://api.example.com/data");
}
}
在上述示例中,我们通过注入 IJSRuntime 来调用 JavaScript 中的 sendHttpRequest 函数,发送 GET 请求并获取响应的字符串。
需要注意的是,在 Blazor WebAssembly 中,由于代码是在客户端执行的,所以需要确保服务端的 API 允许跨域访问。