using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Logging; namespace HttpClientStudy.UnitTest { public class DelegatingHandlerTest { private readonly ITestOutputHelper _logger; public DelegatingHandlerTest(ITestOutputHelper outputHelper) { _logger = outputHelper; } [Fact] public async Task Test() { //构建管道 var handler = new HandlerA() { //相当于下一个中间件(管道) InnerHandler = new HandlerB() }; HttpClient httpClient = new HttpClient(handler); var sd = await httpClient.GetAsync("http://127.0.0.1"); var contentText = await sd.Content.ReadAsStringAsync(); _logger.WriteLine(contentText); } } public class HandlerB : DelegatingHandler { protected override async Task SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { InnerHandler = new SocketsHttpHandler() { }; //请求前业务 var response = await base.SendAsync(request, cancellationToken); //响应后业务 return response; } } public class HandlerA : DelegatingHandler { protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { //请求前业务 var response = await base.SendAsync(request, cancellationToken); //响应后业务 return response; } } }