Skip to content

架构概览 ​

WebApiClientCore 是一个基于 .NET 的 HTTP 客户端声明式框架,通过接口和特性声明来定义 HTTP 请求,无需手动构建 HttpRequestMessage。

核心设计理念 ​

声明式编程 ​

传统的 HTTP 客户端代码:

csharp
// 传统方式
public async Task<User> GetUserAsync(string id)
{
    var client = _httpClientFactory.CreateClient();
    var response = await client.GetAsync($"http://api.example.com/users/{id}");
    response.EnsureSuccessStatusCode();
    var json = await response.Content.ReadAsStringAsync();
    return JsonSerializer.Deserialize<User>(json);
}

使用 WebApiClientCore:

csharp
// 声明式
public interface IUserApi
{
    [HttpGet("users/{id}")]
    Task<User> GetAsync(string id);
}

核心概念 ​

核心组件 ​

1. 特性系统 (Attributes) ​

特性类别说明示例
HTTP 方法定义请求方法和路径[HttpGet], [HttpPost]
内容特性定义请求体格式[JsonContent], [FormContent]
返回特性定义响应解析方式[JsonReturn], [XmlReturn]
过滤器请求/响应拦截处理[LoggingFilter], [Timeout]
主机特性定义基础 URL[HttpHost]

2. IApiParameter ​

自解释参数类型,允许参数自己决定如何序列化和传输:

csharp
public class FaceModel : IApiParameter
{
    public Bitmap Image { get; set; }
    
    public Task OnRequestAsync(ApiParameterContext context)
    {
        // 自定义序列化逻辑
    }
}

3. IApiFilter ​

过滤器,用于请求前后的拦截处理:

csharp
public class SignFilter : IApiFilter
{
    public Task OnRequestAsync(ApiRequestContext context)
    {
        // 请求前:添加签名
    }
    
    public Task OnResponseAsync(ApiResponseContext context)
    {
        // 响应后:记录日志
    }
}

4. ITask<T> ​

支持条件重试的异步任务:

csharp
public interface IUserApi
{
    [HttpGet("users/{id}")]
    ITask<User> GetAsync(string id);
}

var user = await userApi.GetAsync(id)
    .Retry(3)
    .WhenCatch<HttpRequestException>();

请求处理流程 ​

依赖注入 ​

WebApiClientCore 与 ASP.NET Core 的依赖注入系统深度集成:

csharp
// 注册接口
services.AddHttpApi<IUserApi>()
    .ConfigureHttpApi(o =>
    {
        o.HttpHost = new Uri("http://api.example.com/");
    })
    .ConfigureHttpClient(c =>
    {
        c.Timeout = TimeSpan.FromSeconds(30);
    });

// 使用
public class UserService
{
    private readonly IUserApi _userApi;
    
    public UserService(IUserApi userApi)
    {
        _userApi = userApi;
    }
}

扩展包 ​

包名功能
WebApiClientCore核心包
WebApiClientCore.Extensions.OAuthsOAuth2 与 Token 管理
WebApiClientCore.Extensions.NewtonsoftJsonNewtonsoft.Json 支持
WebApiClientCore.Extensions.JsonRpcJSON-RPC 协议支持
WebApiClientCore.OpenApi.SourceGeneratorOpenApi 代码生成工具

与其他方案对比 ​

特性WebApiClientCoreRefitHttpClient
声明式接口✅✅❌
编译时检查✅✅❌
条件重试✅ ITask❌❌
自定义参数序列化✅ IApiParameter❌✅
OAuth 扩展✅需自行实现需自行实现
AOT 支持✅❌✅

下一步 ​