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

无法配置 Flurl 以使用 Polly PolicyHandler

如何解决无法配置 Flurl 以使用 Polly PolicyHandler

我有一个使用依赖注入的 .NET HostedService。我的客户端工厂创建了一个策略处理程序,并在 DI 中配置 Flurl 以使用该工厂。在调试模式下,我可以看到客户端是由使用 TransientFaultPolicyHandler 的工厂生成的,但我没有得到任何重试。

Program.cs

services.AddSingleton<IFlurlClientFactory,PerBaseUrlFlurlClientFactory>();

FlurlHttp.Configure(settings =>
{
    settings.HttpClientFactory = new PollyHttpClientFactory();    
});

PollyHttpClientFactory

public class PollyHttpClientFactory : DefaultHttpClientFactory
{
    public override HttpMessageHandler CreateMessageHandler()
    {
        return new TransientFaultPolicyHandler
        {
             InnerHandler = base.CreateMessageHandler()
        };
    }

    public override HttpClient CreateHttpClient(HttpMessageHandler handler)
    {
        return new HttpClient(CreateMessageHandler());
    }
}

TransientFaultPolicyHandler.cs

public class TransientFaultPolicyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)
    {
        return Policy.Handle<FlurlHttpException>()
            .WaitAndRetryAsync(3,attempt =>
            {
                var nextAttempt = TimeSpan.FromSeconds(Math.Pow(2,attempt));
                //$"Retry attempt {attempt} to make request. Next try on {nextAttempt.TotalSeconds} seconds.";
                return nextAttempt;
            })
            .ExecuteAsync(token => base.SendAsync(request,token),cancellationToken);
    }
}

解决方法

这确实有效。我使用的是一个我不太熟悉的 IDE,所以看不到它被调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。