我有多个长期存在的HttpClient
对象连接到不同的端点。他们使用相同的AutomaticDecompression设置。我应该为每个对象创建一个单独的HttpClientHandler
,还是在所有对象之间共享处理程序实例?
HttpClientHandler httpHandler = new HttpClientHandler
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
HttpClient offerClient = new HttpClient(httpHandler, true);
offerClient.DefaultRequestHeaders.Add("Accept-Content", "gzip");
HttpClient quoteClient = new HttpClient(httpHandler, true);
quoteClient.DefaultRequestHeaders.Add("Accept-Content", "gzip");
HttpClient ordersClient = new HttpClient(httpHandler, true);
ordersClient.DefaultRequestHeaders.Add("Accept-Content", "gzip");
答案 0 :(得分:1)
传统观点认为,单例HttpClient
是行之有效的方法,因此共享同一个处理程序当然是可以的。根据您的DI的配置方式,我很想创建一个源自GZipHttpClient
的{{1}},然后将正确配置的处理程序直接传递给HttpClient
ctor,然后将其连接起来作为单例,并在需要此gzip内容的地方通过DI请求特定类型(而不是base
)。