6.60自定义 DelegatingHandler

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

以下是一个简单的 DelegatingHandler 示例,展示了如何在请求发送前添加自定义请求头,并在响应接收后记录响应状态码:

csharp
public class CustomHandler : DelegatingHandler{    protected override HttpResponseMessage Send(HttpRequestMessage httpRequestMessage, CancellationToken cancellationToken)    {        // 参考异步 SendAsync 方法        return base.Send(httpRequestMessage, cancellationToken);    }    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)    {        // 请求预处理:添加自定义请求头        request.Headers.Add("Custom-Header", "Value");        // 发送请求并获取响应        var response = await base.SendAsync(request, cancellationToken);        // 响应后处理:记录响应状态码        Console.WriteLine($"Response status code: {response.StatusCode}");        return response;    }}

接下来,在 Program.csStartup.cs 文件中注册 CustomHandler

csharp
// 注册 CustomHandler 为服务services.TryAddSingleton<CustomHandler>();// 为默认 HttpClient 客户端启用 CustomHandlerservices.AddHttpClient()    .AddHttpMessageHandler<CustomHandler>();// 若为特定命名的 HttpClient 客户端启用,可如下配置// services.AddHttpClient("weixin")//     .AddHttpMessageHandler<CustomHandler>();

.AddHttpMessageHandler 方法支持多次调用,以添加多个处理器。例如:

csharp
services.AddHttpClient(string.Empty)    .AddHttpMessageHandler<CustomHandler1>()    .AddHttpMessageHandler<CustomHandler2>()    .AddHttpMessageHandler<CustomHandler3>();

注意:处理器的执行顺序为注册顺序,即先注册的处理器先执行。