Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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# 具有用于记录请求/响应的相互TLS和DelegatingHandler的HttpClient引发异常_C#_Dotnet Httpclient - Fatal编程技术网

C# 具有用于记录请求/响应的相互TLS和DelegatingHandler的HttpClient引发异常

C# 具有用于记录请求/响应的相互TLS和DelegatingHandler的HttpClient引发异常,c#,dotnet-httpclient,C#,Dotnet Httpclient,我想用LoggingHandler:DelegatingHandler记录HttpClient的请求和响应,但我得到错误任务被取消了。HttpClient通过TLS进行连接 var httpClient = new HttpClient(MutualTlsHandler()); private WebRequestHandler MutualTlsHandler() { var certificateCollection = new X509Certificate2Collection

我想用
LoggingHandler:DelegatingHandler
记录
HttpClient
的请求和响应,但我得到错误
任务被取消了。
HttpClient
通过TLS进行连接

var httpClient = new HttpClient(MutualTlsHandler());

private WebRequestHandler MutualTlsHandler()
{
    var certificateCollection = new X509Certificate2Collection { ClientConfiguration.Certificate };
    var mutualTlsHandler = new WebRequestHandler();

    mutualTlsHandler.ClientCertificates.AddRange(certificateCollection);
    mutualTlsHandler.ServerCertificateValidationCallback = IsValidServerCertificate;

    return mutualTlsHandler;
}
这就像一个符咒,但我想记录发送的请求。试图创建一个
LoggingHandler
并将其添加到链中会导致错误
任务被取消

var httpClient = new HttpClient(new LoggingHandler(MutualTlsHandler())

internal class LoggingHandler : DelegatingHandler
{
    public LoggingHandler(HttpMessageHandler innerHandler)
        : base(innerHandler)
    {
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
        CancellationToken cancellationToken)
    {
        var content = request.Content.ReadAsStringAsync();

        return await base.SendAsync(request, cancellationToken);
    } 
}
var-httpClient=new-httpClient(new-LoggingHandler(mutualtlschandler())
内部类LoggingHandler:DelegatingHandler
{
公共日志处理程序(HttpMessageHandler innerHandler)
:base(innerHandler)
{
}
受保护的覆盖异步任务SendAsync(HttpRequestMessage请求,
取消令牌(取消令牌)
{
var content=request.content.ReadAsStringAsync();
返回wait base.sendaync(请求、取消令牌);
} 
}
我假设使用
request.Content.ReadAsStringAsync()
读取会导致需要倒带的流,但如何实现这一点?使用
Content.CopyToAsync
复制会导致相同的错误


感谢所有帮助。

您是否尝试在此nuget软件包中使用
HttpClientFactory

加上这一点,我认为你可以做到:

HttpClientFactory.Create(mutualTlsHandler, loggingHandler);

不幸的是,这会产生同样的结果。令人困惑的是,在读取内容的链中可能有多个
DelegatingHandler
s,但一旦引入
WebRequestHandler
,它就会失败。