如何解决有什么方法可以将 Polly 重试策略添加到从 HttpClientFactory 创建的所有 HttpClient 中?
我有一个 A
类,它有一个 GetClient
方法,它使用 HttpClientFactory 创建命名的 HttpClients,如下所示:
public class A : AInterface {
A (IHttpClientFactory factory,...) {
_httpClientFactory = factory;
}
private CustomClient GetClient (string httpClientName,Uri baseUri) {
var client = _httpClientFactory.CreateClient(httpClientName);
client.BaseAddress = baseUri;
return new CustomClient (client);
}
}
此处,CustomClient
是自动生成的客户端代码,它使用创建时使用的 client
发送 HTTP 请求。
我想为 GetClient() 方法返回的所有 HttpClient 添加 Polly 重试/超时策略。
我的尝试
在 Startup.cs 中添加此项以将 HttpClientFactory 作为依赖项注入:
services.AddHttpClient<AInterface,A>()
.AddPolicyHandler(PolicyHandler.RetryPolicy())
.AddPolicyHandler(PolicyHandler.TimeoutPolicy());
services.AddScoped<AInterface,A>();
我的理解是,此 HttpClientFactory 创建的所有客户端都将具有与其关联的重试策略,但这似乎不起作用。
有什么建议吗?我究竟做错了什么? 提前致谢!
编辑1: 我进一步研究了这个......看起来重试策略没有被应用,因为 GetClient() 返回一个命名的客户端,而重试策略在启动时被添加到未命名的客户端。但是,我无法避免使用命名的 HttpClient(因为某些授权逻辑取决于它)。但是我也无法在启动时知道所有可能的名称,因此我无法在启动时向命名客户端添加策略..感谢任何输入!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。