5.3定义请求方法

创建于 2026 年 8 月 17 日约 2 分钟读完

IHttpService 声明式接口中,您可以定义各种 API 请求方法。这些方法需要标记有从 HttpMethodAttribute 派生的特性,以指明其对应的 HTTP 请求类型。系统预置了多种常见的 HTTP 请求方法特性,同时也支持自定义方法特性:

cs
public interface IHttpService : IHttpDeclarative{    // 定义 HTTP GET 请求    [Get("https://furion.net/")]    Task<string> GetMethodAsync();    // 定义 HTTP PUT 请求    [Put("https://furion.net/")]    Task<string> PutMethodAsync();    // 定义 HTTP POST 请求    [Post("https://furion.net/")]    Task<string> PostMethodAsync();    // 定义 HTTP DELETE 请求    [Delete("https://furion.net/")]    Task<string> DeleteMethodAsync();    // 定义 HTTP HEAD 请求    [Head("https://furion.net/")]    Task<string> HeadMethodAsync();    // 定义 HTTP OPTIONS 请求    [Options("https://furion.net/")]    Task<string> OptionsMethodAsync();    // 定义 HTTP TRACE 请求    [Trace("https://furion.net/")]    Task<string> TraceMethodAsync();    // 定义 HTTP PATCH 请求    [Patch("https://furion.net/")]    Task<string> PatchMethodAsync();    // 定义 HTTP QUERY 请求    [Query("https://furion.net/")]    Task<string> PatchMethodAsync();    // 自定义 HTTP 请求方法    [HttpMethod("Connect", "https://furion.net/")]    Task<string> ConnectMethodAsync();    // 定义泛型方法    [Get("https://furion.net/")]    Task<T> GenericMethodAsync<T>();}
cs
public interface IHttpService : IHttpDeclarative{    // 缺少 [HttpMethod] 特性,将导致异常    Task<string> UnknownMethodAsync();}

自定义请求方法

除了直接利用 [HttpMethod("Connect", "https://furion.net/")] 来添加自定义的 HTTP 请求方法外,我们还可以创建一个具体的 ConnectAttribute 特性类,以提高代码的复用性和可读性。这个特性类将继承自 HttpMethodAttribute,并专门用于表示 Connect 请求。

cs
[AttributeUsage(AttributeTargets.Method)]public sealed class ConnectAttribute : HttpMethodAttribute{    public ConnectAttribute(string? requestUri = null)        : base("Connect", requestUri)    {    }}

现在,我们可以在 IHttpService 接口中使用自定义的 [Connect] 特性来替代之前的 [HttpMethod("Connect", ...)] 特性:

cs
public interface IHttpService : IHttpDeclarative{    // 使用自定义 Connect 特性    [Connect("https://furion.net/")]    Task<string> ConnectMethodAsync();}

这样的代码更加简洁明了,同时提升了代码的可维护性和复用性。