Blazor Server调用WebApi时Microsoft.AspNetCore.Blazor.HttpClient的替代方案
Blazor Server 调用WebApi HttpClient弃用包替代方案
背景说明
Microsoft.AspNetCore.Blazor.HttpClient 包早在.NET Core 3.0 版本就已正式弃用,相关JSON扩展方法已整合进官方原生类库,无需再单独安装该Nuget包。
推荐替代方案(无需额外安装Nuget包,.NET 5+ 原生支持)
- 引入官方自带的JSON扩展命名空间
在你的EmployeeService类所在文件头部添加引用:
using System.Net.Http.Json;
- 替换原有扩展方法
原有的GetJsonAsync方法替换为原生的GetFromJsonAsync方法,修改后的代码如下:
public class EmployeeService : IEmployeeService { private readonly HttpClient httpClient; public EmployeeService(HttpClient httpClient) { this.httpClient = httpClient; } public async Task<IEnumerable<Employee>> GetEmployees() { // 可选传入JsonSerializerOptions配置反序列化规则,比如大小写不敏感 return await httpClient.GetFromJsonAsync<Employee[]>("api/employees", new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); } }
- 注册HttpClient服务
在Blazor Server项目的Program.cs文件中添加服务注册,避免注入报错:
// 替换为你实际的WebApi根地址,如果是同站点部署可直接填当前站点地址 builder.Services.AddHttpClient<IEmployeeService, EmployeeService>(client => { client.BaseAddress = new Uri("https://你的webapi根地址/"); });
兼容老代码的替代方案(可选)
如果需要兼容旧版本的代码写法,可以安装Nuget包Microsoft.AspNet.WebApi.Client,该包包含原有的GetJsonAsync等扩展方法,原有代码无需修改即可运行。
常见注意事项
- 若WebApi与Blazor Server跨域部署,需要在WebApi端配置CORS策略,允许Blazor Server的域名访问接口
- 反序列化时如果出现字段匹配为null的情况,优先检查是否添加了
PropertyNameCaseInsensitive = true配置,适配接口返回的JSON字段大小写规则
内容的提问来源于stack exchange,提问作者Baba
相关产品推荐
相关产品推荐

