声明式请求:接口即文档
HttpAgent 声明式请求让 HTTP 接口定义直接成为 C# 接口:请求地址、方法、参数、标头全部由特性描述,支持继承与面向对象设计。H团
HttpAgent 团队
传统的 HTTP 调用代码散落在各个服务里,接口地址、参数、标头与业务逻辑耦合。HttpAgent 的声明式请求把「接口定义」还给接口:
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);}注入即用:
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等。
进阶:继承复用#
公共配置可以下沉到基接口,子接口自动继承:
public interface IBaseApi : IHttpDeclarative{ [BaseAddress("https://api.example.com/")] [Timeout(10)]}public interface IUserApi : IBaseApi // 自动继承基地址与超时配置{ [Get("user/{id}")] Task<User> GetUserAsync([Path] int id);}完整特性列表与自定义提取器,请参阅 声明式请求 文档。