从.net Core 2+开始,MS为我们提供了一种向HttpClient添加策略的方法,只要客户端是通过IOC容器注入的,它就可以使用。但这使我怀疑,我在不断地谷歌搜索时似乎无法弄清楚。如果我们想在仍然使用HttpClientFactory和DI将客户端注入提供程序的同时重写HttpClient策略怎么办?我们可以“关闭”特定请求的策略,还是可以添加其他策略,同时覆盖启动中定义的全局策略?
答案 0 :(得分:1)
使用不同的named clients或typed clients来定义单独的逻辑HttpClient
配置。
OR
使用IHttpClientFactory
配置策略时,可以使用.AddPolicyHandler(...)
overloads或.AddPolicyHandlerFromRegistry(...)
overloads,它们允许您根据HttpRequestMessage
中的信息选择策略。这可以允许更改适用于不同请求的策略。
以Polly and HttpClientFactory documentation为例,一个用例可能是仅将重试策略应用于GET请求,而不应用于其他http动词:
var retryPolicy = HttpPolicyExtensions
.HandleTransientHttpError()
.WaitAndRetryAsync(new[]
{
TimeSpan.FromSeconds(1),
TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(10)
});
var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy<HttpResponseMessage>();
services.AddHttpClient(/* etc */)
// Select a policy based on the request: retry for Get requests, noOp for other http verbs.
.AddPolicyHandler(request => request.Method == HttpMethod.Get ? retryPolicy : noOpPolicy);