一个HttpClientHandler是否应该与多个HttpClient对象一起使用?

时间:2018-12-12 15:50:01

标签: c# .net

我有多个长期存在的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");

1 个答案:

答案 0 :(得分:1)

传统观点认为,单例HttpClient是行之有效的方法,因此共享同一个处理程序当然是可以的。根据您的DI的配置方式,我很想创建一个源自GZipHttpClient的{​​{1}},然后将正确配置的处理程序直接传递给HttpClient ctor,然后将其连接起来作为单例,并在需要此gzip内容的地方通过DI请求特定类型(而不是base)。