将httpHandler附加到httpclientFactory webapi aspnetcore 2.1

我试图使用“ConfigurePrimaryHttpMessageHandler”将处理程序附加到httpclientfactory

但当我查看HttpClient内部以查看处理程序是否存在时,我无法找到它

我是否正确附加了处理程序?

任何建议

services.AddHttpClient(client => { client.BaseAddress = new Uri(myUri); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { AllowAutoRedirect = false, AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }); public interface IGitHubClient { Task GetData(); } public class GitHubClient : IGitHubClient { private readonly HttpClient _client; public GitHubClient(HttpClient httpClient) { _client = httpClient; } public async Task GetData() { return await _client.GetStringAsync("/"); } } public class ValuesController : Controller { private readonly IGitHubClient _gitHubClient;; public ValuesController(IGitHubClient gitHubClient) { _gitHubClient = gitHubClient; } [HttpGet] public async Task Get() { //my _gitHubClient has no Handler attached!!! string result = await _gitHubClient.GetData(); return Ok(result); } } 

您展示的代码是推荐的方法。

关于_gitHubClient的评论

//我的_gitHubClient没有附加Handler !!!

似乎是一种误解。

_gitHubClient是在其GitHubClient实现中包装HttpClient实例的抽象。

 public class GitHubClient : IGitHubClient { private readonly HttpClient _client; //<< Handler will be attached to this instance public GitHubClient(HttpClient httpClient) { _client = httpClient; } public async Task GetData() { return await _client.GetStringAsync("/"); } } 

这是包装的实例,它将具有附加的处理程序。

根据当前配置,每当框架必须创建IGitHubClient派生的GitHubClient实例以进行注入时,工厂将使用启动时提供的设置创建HttpClient 。 其中还包括添加ConfigurePrimaryHttpMessageHandler提供的HttpClientHandler