微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有什么方法可以将 Polly 重试策略添加到从 HttpClientFactory 创建的所有 HttpClient 中?

如何解决有什么方法可以将 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 举报,一经查实,本站将立刻删除。