using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HttpClientStudy.UnitTest.HttpClients { public class PipelineClientTest { private readonly ITestOutputHelper _logger; public PipelineClientTest(ITestOutputHelper outputHelper) { _logger = outputHelper; } /// /// 手动处理 /// [Fact] public async Task Delegating_Test() { //构建管道 var handler = new CustomHeadersHandler() { //相当于下一个中间件(管道) InnerHandler = new SocketsHttpHandler() { AllowAutoRedirect = true } }; //构造中传入管道对象 HttpClient httpClient = new HttpClient(handler); var sd = await httpClient.GetAsync(WebApiConfigManager.GetWebApiConfig().BaseUrl + "/api/health"); var contentText = await sd.Content.ReadAsStringAsync(); _logger.WriteLine(contentText); } [Fact] public async Task CreateHttpClient_Test() { HttpClient client = new PipelineHttpClient().CreateHttpClient(); var r = await client.GetAsync(WebApiConfigManager.GetWebApiConfig().BaseUrl + "/api/health"); r.EnsureSuccessStatusCode(); } [Fact] public async Task BuilderHttpClient_Test() { //构建管道 List handlers = new List() { new TokenDelegatingHandler(), }; //添加 handlers.Add(new LoggingHandler()); handlers.Add(new ExceptionDelegatingHandler()); var handlerBuilder = new HttpMessageHandlerBuilder(handlers); //第一次:发送请求,从日志看管道执行顺序 var httpClient = handlerBuilder.Build(); httpClient.BaseAddress = webApiBaseUri; var response = await httpClient.GetAsync("/api/Config/GetApiConfig"); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine($"响应内容:{content}"); // 改变管科 handlers.Remove(new ExceptionDelegatingHandler()); var httpClient2 = handlerBuilder.Build(); } } }