Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Polly、DI HttpClient和HttpMessageHandler获取通用日志记录_C#_.net_.net Core_Polly - Fatal编程技术网

C# 使用Polly、DI HttpClient和HttpMessageHandler获取通用日志记录

C# 使用Polly、DI HttpClient和HttpMessageHandler获取通用日志记录,c#,.net,.net-core,polly,C#,.net,.net Core,Polly,我有一个类,它包装了一个独立的HttpClient,并且有一些使用Polly的标准函数。我将从这个HttpClientEx类继承类,并在我的其他代码中利用它的公共功能 最近出现了一个要求,即我们与httpclient之间的消息应该被记录下来。我添加了一个HttpMessageHandler,它实现了一些常见的日志功能,但现在我遇到了一个问题: 当我使用Polly调用任何GET/POST等时: await polPolly.ExecuteAsync(async(ctCancelToken)=>

我有一个类,它包装了一个独立的HttpClient,并且有一些使用Polly的标准函数。我将从这个HttpClientEx类继承类,并在我的其他代码中利用它的公共功能

最近出现了一个要求,即我们与httpclient之间的消息应该被记录下来。我添加了一个HttpMessageHandler,它实现了一些常见的日志功能,但现在我遇到了一个问题:

当我使用Polly调用任何GET/POST等时:

await polPolly.ExecuteAsync(async(ctCancelToken)=>
{
        return await HttpClient.GetAsync(sUrl, ctCancelToken);
}, CancellationToken.None);
它引发异常:无法访问已释放的对象。 对象名称:“System.Net.Http.HttpConnection+HttpConnectionResponseContent”

我在网上读到,这可能是因为我没有使我的消息处理程序“可重用”,而Polly正在导致此问题的解决。我在那里看到的所有HttpMessageHandler的示例都将新的HttpClient(SomeMessageHandler,false)显示为“修复”。。。但是:这不是解决办法。您甚至不应该以这种方式使用HttpClient。它应该是被除名的

所以问题是:我如何指定我的处理程序是可重用的,以符合使用
HttpClient
的正确方式?我愿意使用
IHttpClientFactory
类型化的HttpClients…
都可以。我似乎找不到配置此属性的方法

谢谢


詹姆斯

@山地旅行者——就是这样。我正在自定义处理程序中处理我的HttpResponseMessage。我本不该这样


感谢您提供的信息。

IHttpClientFactory当然可以为您正确管理HttpClient处理程序的生命周期和处理程序的处置。Polly不处理Http消息处理程序或内容(它不处理它不拥有的任何对象)。异常看起来像是告诉您响应中的HttpContent已被释放。注意事项和周围HttpResponse内容处理可能有用。默认情况下,IHttpClientFactory也会为您配置自己的内容处理程序-切换的另一个可能原因(取决于您的日志记录需要-您还可以使用HttpClientFactory在自己的自定义处理程序中轻松配置)