1

我正在尝试HttpClient.GetAsync循环执行。
根据Microsoft Doc,建议使用 1 个HttpClient.

我得到的方式HttpClient

var httpClient = HttpClientFactory.Create(HttpClientRequestHandler.HttpMessageHandler, delegatingHandler);

GetAsync第一次正常运行,但是当我重用httpClient引用时,出现错误:The 'DelegatingHandler' list is invalid because the property 'InnerHandler' of 'HttpClientTelemetryHandler' is not null.

当我每次都尝试在循环中创建一个新实例时Handler,它工作正常。HttpClient

现在这是一个利益冲突。我应该每次在循环中创建一个新实例,还是有任何其他方法可以做到这一点,这是正确的方法。

附加信息:我用来创建HttpClientis的自定义库.Net Standard 2.0和调用 HttpClient 的客户端应用程序 is .Net Core 2.1

感谢任何帮助。

谢谢。

4

1 回答 1

0

通常,当您Handler在批处理或循环中重复使用相同的实例时,会发生此错误。

在每个请求结束时正确处理 HttpClient 可以防止此错误。

public class Test{
 private static HttpClient _httpClient;

 SomeFunction(){
 using (var client = new HttpClient(
       HttpClientFactory.CreatePipeline(
       new HttpClientHandler
           {
              CookieContainer = new CookieContainer(),
              UseCookies = true
            },
       new DelegatingHandler[] { new CustomHandler() })))
    {
         //do something with `client`
    }  

 }
}
于 2019-11-20T10:05:04.853 回答