Blazor 怎么封装一个 API 服务类

来源:这里教程网 时间:2026-02-21 17:34:57 作者:

Blazor 中封装 API 服务类,核心是把 HTTP 调用逻辑抽离成可复用、可注入、易测试的 C# 类,通常配合

IHttpClientFactory
使用,避免手动管理
HttpClient
生命周期问题。

创建强类型服务类

定义一个接口(如

IBlogService
)和实现类(如
BlogService
),把增删改查等操作封装为方法。返回类型推荐用
Task<t></t>
,适配 Blazor 的异步渲染流程。

接口定义清晰职责,方便 Mock 测试和依赖替换 实现类中不直接 new HttpClient,而是通过构造函数注入
IHttpClientFactory
factory.CreateClient("Api")
获取命名客户端,提前在
Program.cs
配置好基础地址和默认头

注册服务与命名客户端

Program.cs
(或
Startup.cs
)中注册服务,并配置命名 HttpClient:

builder.Services.AddHttpClient<iblogservice blogservice>("Api", client => { client.BaseAddress = new Uri("https://api.example.com/"); });</iblogservice>
也可额外添加拦截器,比如统一加 Authorization Header 服务生命周期建议用
AddScoped
(组件级共享),避免跨用户状态污染

在组件中调用并处理状态

组件中通过

@inject IBlogService BlogService
使用,在
OnInitializedAsync
或事件中调用:

调用前设
IsLoading = true
,触发 UI 更新(如显示 loading 指示器)
try/catch
捕获
HttpRequestException
,区分网络错误与业务错误
成功后赋值给
@bind
StateHasChanged()
显式刷新(尤其在非 UI 线程回调时)

支持取消与错误重试(可选进阶)

对长请求或用户可能中断的场景,传入

CancellationToken

方法签名改为
Task<list>> GetPostsAsync(CancellationToken ct)</list>
调用时传
new CancellationTokenSource(TimeSpan.FromSeconds(10)).Token
需要重试可用 Polly:在
AddHttpClient
配置中加入
.AddTransientHttpErrorPolicy(...)

基本上就这些。不复杂但容易忽略 HttpClient 生命周期和状态更新时机,按这个结构封装后,API 调用就干净、可控、可维护了。

相关推荐