声明式请求:接口即文档

HttpAgent 声明式请求让 HTTP 接口定义直接成为 C# 接口:请求地址、方法、参数、标头全部由特性描述,支持继承与面向对象设计。
HttpAgent 团队2026 年 6 月 10 日1 分钟读完

传统的 HTTP 调用代码散落在各个服务里,接口地址、参数、标头与业务逻辑耦合。HttpAgent 的声明式请求把「接口定义」还给接口:

cs
public interface IUserApi : IHttpDeclarative{    [Get("https://api.example.com/user/{id}")]    Task<User> GetUserAsync([Path] int id);    [Post("https://api.example.com/user")]    [Profiler]    Task<User> CreateUserAsync([Body] User user);}

注入即用:

cs
builder.Services.AddHttpRemote()    .AddHttpDeclarative<IUserApi>();   // 注册声明式接口public class UserService(IUserApi userApi){    public Task<User> Get(int id) => userApi.GetUserAsync(id);}

能力一览#

  • 请求方法[Get][Post][Put][Delete][Patch][Head][Query] 等,支持自定义;
  • 参数绑定[Path][QueryParam][Header][Body][Cookie]
  • 配置特性[Profiler][Timeout][Retry][BaseAddress][SimulateBrowser] 等 40+ 特性;
  • 面向对象:接口继承、默认接口实现、冻结参数类型;
  • 返回值:支持 Task<T>ValueTask<T>HttpRemoteResult<T>HttpResponseMessage 等。

进阶:继承复用#

公共配置可以下沉到基接口,子接口自动继承:

cs
public interface IBaseApi : IHttpDeclarative{    [BaseAddress("https://api.example.com/")]    [Timeout(10)]}public interface IUserApi : IBaseApi   // 自动继承基地址与超时配置{    [Get("user/{id}")]    Task<User> GetUserAsync([Path] int id);}

完整特性列表与自定义提取器,请参阅 声明式请求 文档。

相关文章

长轮询 vs SSE vs WebSocket:实时通信怎么选HttpAgent 对长轮询、Server-Sent Events 与 WebSocket 三种实时通信方式提供了统一支持。本文对比三者的原理、适用场景与选择建议。2026 年 7 月 20 日 · HttpAgent 团队 · 约 2 分钟读完