Blazor中封装API服务类的核心是抽离HTTP调用逻辑为可注入、可测试的强类型服务,配合IHttpClientFactory管理生命周期;需定义接口与实现类、返回Task、注入命名客户端、Scoped注册、组件中正确处理加载状态与异常。
Blazor 中封装 API 服务类,核心是把 HTTP 调用逻辑抽离成可复用、可注入、易测试的 C# 类,通常配合 IHttpClientFactory 使用,避免手动管理 HttpClient 生命周期问题。
定义一个接口(如 IBlogService)和实现类(如 BlogService),把增删改查等操作封装为方法。返回类型推荐用 Task,适配 Blazor 的异步渲染流程。
IHttpClientFactory
factory.CreateClient("Api") 获取命名客户端,提前在 Program.cs 配置好基础地址和默认头在 Program.cs(或 Startup.cs)中注册服务,并配置命名 HttpClient:
builder.Services.AddHttpClient("Api", client => { client.BaseAddress = new Uri("https://api.example.com/"); }); AddScoped(组件级共享),避免跨用户状态污染组件中通过 @inject IBlogService BlogService 使用,在 OnInitializedAsync 或事件中调用:
IsLoading = true,触发 UI 更新(如显示 loading 指示器)try/catch 捕获 HttpRequestException,区分网络错误与业务错误@bind 或 StateHasChanged() 显式刷新(尤其在非 UI 线程回调时)对长请求或用户可能中断的场景,传入 CancellationToken:
Task> GetPostsAsync(CancellationToken ct)
new CancellationTokenSource(TimeSpan.FromSeconds(10)).Token
在 AddHttpClient 配置中加入 .AddTransientHttpErrorPolicy(...)
基本上就这些。不复杂但容易忽略 HttpClient 生命周期和状态更新时机,按这个结构封装后,API 调用就干净、可控、可维护了。