using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace HttpClientStudy.Core { /// /// 管道方式 HttpClient客户端 /// public class PipelineHttpClient { public List HttpMessageHandlers { get; set; } public PipelineHttpClient() { HttpMessageHandlers = new List() { new CustomHeadersHandler(), new LoggingHandler(), }; } public PipelineHttpClient(List httpMessageHandlers) { HttpMessageHandlers = httpMessageHandlers; if (httpMessageHandlers == null || httpMessageHandlers?.Count == 0) { HttpMessageHandlers = new List(); } } public void AddDelegatingHandler(DelegatingHandler handler) { HttpMessageHandlers.Add(handler); } public HttpClient CreateHttpClient() { //创建处理器链 //最终处理器:最后一个请求处理程序,默认是SocketsHttpHandler. HttpMessageHandler currentPipeLine = new SocketsHttpHandler() { //自定义配置 PooledConnectionLifetime = TimeSpan.FromSeconds(120), }; //pipeline = new CustomHeadersHandler() { InnerHandler = pipeline}; //pipeline = new LoggingHandler () { InnerHandler = pipeline}; //倒序组装:完成后执行顺序与注册顺序一致 HttpMessageHandlers.Reverse(); for (int i = 0; i < HttpMessageHandlers.Count; i++) { HttpMessageHandlers[i].InnerHandler = currentPipeLine; currentPipeLine = HttpMessageHandlers[i]; } // 利用管道创建HttpClient var httpClient = new HttpClient(currentPipeLine); return httpClient; } } }