5.15请求处理程序与禁用 Token

IHttpRequestEventHandler 接口允许您定义 HTTP 请求的预处理操作。通过实现该接口,您可以创建自定义的请求处理程序,例如 CustomRequestEventHandler 类:

设置请求处理程序#

IHttpRequestEventHandler 接口允许您定义 HTTP 请求的预处理操作。通过实现该接口,您可以创建自定义的请求处理程序,例如 CustomRequestEventHandler 类:

cs
public class CustomRequestEventHandler : IHttpRequestEventHandler{    // 在发送 HTTP 请求之前的操作    public void OnPreSendRequest(HttpRequestMessage httpRequestMessage) {}    // 在收到 HTTP 响应之后的操作    public Task OnPostReceiveResponseAsync(HttpResponseMessage httpResponseMessage, CancellationToken cancellationToken) {}    // 当发送 HTTP 请求发生异常时的操作    public void OnRequestFailed(Exception exception, HttpResponseMessage? httpResponseMessage = null) {}}

发送 HTTP 请求时,可通过添加 RequestEventHandlerAttribute 特性来设置请求处理程序。

HTTP 声明式请求通过 RequestEventHandlerAttribute 特性来设置请求处理程序。相应的 HTTP 声明式提取器实现为 RequestEventHandlerDeclarativeExtractor 类型,该类型负责解析 RequestEventHandlerAttribute 特性并构建 HttpRequestBuilder 实例所需的请求处理程序配置。

cs
// 在接口定义上应用,影响所有方法[RequestEventHandler(typeof(CustomRequestEventHandler))]public interface IHttpService : IHttpDeclarative{    // 自动应用接口声明    [Get("https://furion.net/")]    Task<string> GetStringAsync();    // 在方法上应用    [RequestEventHandler(typeof(CustomRequestEventHandler))]    [Get("https://furion.net/")]    Task<string> GetStringAsync();}

RequestEventHandlerAttribute 包含以下构造函数和属性:

  • 构造函数

    • new(handlerType):作用于方法或接口,配置请求处理程序。
  • 属性

    • HandlerType:请求处理程序(Type 类型)。

禁用 Access Token 自动管理#

框架内置了 Access Token 自动管理功能,只需实现 IHttpAccessTokenProvider 接口,并在 GetAsync 方法中编写获取 Access Token 的逻辑即可。通常情况下,获取 Access Token 需要借助独立的 HTTP 请求,而若在 GetAsync 内部直接使用 IHttpRemoteService 发送请求,则会因触发自动管理机制而陷入递归死循环。此时,需通过标记 [SuppressTokenManagement] 特性显式禁用当前请求的 Access Token 自动管理,避免循环调用。

cs
public class CustomHttpAccessTokenProvider(IHttpBaseService httpBaseService): IHttpAccessTokenProvider{    /// <inheritdoc />    public async Task<HttpAccessToken?> GetAsync(CancellationToken cancellationToken)    {        var serverToken = await httpBaseService.LoginAsync(new { username = "furion", password = "your-password"});        return new HttpAccessToken(serverToken.Token, serverToken.ExpiresAt)    };}

HTTP 声明式请求通过 SuppressTokenManagementAttribute 特性来禁用框架的 Access Token 自动管理。相应的 HTTP 声明式提取器实现为 SuppressTokenManagementDeclarativeExtractor 类型,该类型负责解析 SuppressTokenManagementAttribute 特性并构建 HttpRequestBuilder 实例所需的禁用框架的 Access Token 自动管理配置。

cs
public interface IHttpService : IHttpDeclarative{    [Get("https://furion.net/")]    [SuppressTokenManagement]    // 跳过 Token 管理,避免递归调用    Task<YourServerToken> LoginAsync(object auth);    [Get("https://furion.net/")]    Task<YourModel>> GetAsync();    // 无需标记}

若需对特定请求禁用该功能,可设置 [JsonResponseStringUnwrap(false)] 特性。

SuppressTokenManagementAttribute 包含以下构造函数和属性:

无。