【发布时间】:2016-03-11 12:35:25
【问题描述】:
我想用LoggingHandler : DelegatingHandler 记录HttpClient 的请求和响应,但我收到错误A task was canceled。 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 并将其添加到链中会导致错误 A task was canceled。
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);
}
}
我认为使用request.Content.ReadAsStringAsync() 读取会导致需要倒带的流,但是如何实现呢?使用Content.CopyToAsync 复制会导致相同的错误。
感谢所有帮助。
【问题讨论】:
标签: c# dotnet-httpclient