我只是想创建一个简单的测试,我使用DelegateHandlers
实例化一个HttpClient
无需带Asp.net Core包。
我有 2 个删除处理程序
ThrottlingDelegatingHandler
-
PolicyHttpMessageHandler
(来自波莉包)
我怎样才能将两者结合起来并传递给HttpClient
?
var policy = HttpPolicyExtensions.HandleTransientHttpError().CircuitBreakerAsync(5, TimeSpan.FromSeconds(30));
var pollyHandler = new PolicyHttpMessageHandler(policy);
var http = new HttpClient(new ThrottlingDelegatingHandler(MaxParallelism, pollyHandler));
上面给了我一个错误:System.InvalidOperationException : The inner handler has not been assigned.
The PolicyHttpMessageHandler
没有可以传递的构造函数innerHandler
.
我怎样才能做到这一点?
你必须设置InnerHandler
在你最内心的处理者中HttpClientHandler
像这样:
var policy = HttpPolicyExtensions.HandleTransientHttpError().CircuitBreakerAsync(5, TimeSpan.FromSeconds(30));
var pollyHandler = new PolicyHttpMessageHandler(policy);
//New line
pollyHandler.InnerHandler = new HttpClientHandler();
var http = new HttpClient(new ThrottlingDelegatingHandler(MaxParallelism, pollyHandler));
您基本上必须设置管道中的下一个处理程序。
以供参考:如果未指定处理程序,这就是 HttpClient 的构造方式
#region Constructors
public HttpClient() : this(new HttpClientHandler())
{
}
public HttpClient(HttpMessageHandler handler) : this(handler, true)
{
}
public HttpClient(HttpMessageHandler handler, bool disposeHandler) : base(handler, disposeHandler)
{
_timeout = s_defaultTimeout;
_maxResponseContentBufferSize = HttpContent.MaxBufferSize;
_pendingRequestsCts = new CancellationTokenSource();
}
#endregion Constructors
哪里的base
is the HttpMessageInvoker
class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)