从 .net Core 2+ 开始,MS 为我们提供了一种向 HttpClient 添加策略的方法,只要客户端通过 IOC 容器注入就可以工作。但这让我产生了一个疑问,我在无休止的谷歌搜索时似乎无法弄清楚。如果我们想在仍然使用 HttpClientFactory 和 DI 将客户端注入提供程序的同时覆盖 HttpClient 策略怎么办?我们可以“关闭”特定请求的策略,还是可以在覆盖 Startup 上定义的全局策略的同时添加额外的策略?
问问题
1010 次
1 回答
4
使用不同的命名客户端或类型化客户端来定义单独的逻辑HttpClient
配置。
或者
使用 配置策略时IHttpClientFactory
,您可以使用.AddPolicyHandler(...)
重载或.AddPolicyHandlerFromRegistry(...)
重载,它们允许您根据HttpRequestMessage
. 这可以允许改变应用于不同请求的策略。
以Polly 和 HttpClientFactory 文档为例,一个用例可能是将重试策略仅应用于 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);
于 2020-01-24T17:51:51.693 回答