6.60自定义 DelegatingHandler
创建于 2026 年 8 月 17 日约 1 分钟读完
以下是一个简单的 DelegatingHandler 示例,展示了如何在请求发送前添加自定义请求头,并在响应接收后记录响应状态码:
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.cs 或 Startup.cs 文件中注册 CustomHandler:
// 注册 CustomHandler 为服务services.TryAddSingleton<CustomHandler>();// 为默认 HttpClient 客户端启用 CustomHandlerservices.AddHttpClient() .AddHttpMessageHandler<CustomHandler>();// 若为特定命名的 HttpClient 客户端启用,可如下配置// services.AddHttpClient("weixin")// .AddHttpMessageHandler<CustomHandler>();.AddHttpMessageHandler 方法支持多次调用,以添加多个处理器。例如:
services.AddHttpClient(string.Empty) .AddHttpMessageHandler<CustomHandler1>() .AddHttpMessageHandler<CustomHandler2>() .AddHttpMessageHandler<CustomHandler3>();注意:处理器的执行顺序为注册顺序,即先注册的处理器先执行。