问题描述
我有一个 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 (将#修改为@)