提问人:Ivan Debono 提问时间:8/4/2023 最后编辑:Peter CsalaIvan Debono 更新时间:8/4/2023 访问量:128
如何将 Polly 与 Refit 一起使用?
How to use Polly with Refit?
问:
我没有使用 中的服务配置我的 Refit 客户端。我正在做以下工作:Startup
public Task<IMyService> GetService()
{
var retryPolicy = HttpPolicyExtensions
.HandleTransientHttpError()
.Or<TimeoutRejectedException>()
.WaitAndRetryAsync(2, _ => TimeSpan.FromMilliseconds(500));
var timeoutPolicy = Policy
.TimeoutAsync<HttpResponseMessage>(TimeSpan.FromMilliseconds(500));
return Task.FromResult(RestService.For<IMyService>(new HttpClient((DelegatingHandler)myHandler)
{
BaseAddress = new Uri(myUrl)
},
new RefitSettings() {}
));
}
我需要将 Polly 策略添加到客户端。在使用 ?RestService.For<>
答:
0赞
Peter Csala
8/4/2023
#1
通常,每当您注册一个用 Polly 策略(或策略链)装饰的命名/键入时,您都会像这样执行操作HttpClient
.AddHttpClient<XYZ>()
.AddPolicyHandler(...);
使用指定的 Polly 策略注册 a。(参考文献AddPolicyHandler
PolicyHttpMessageHandler
)
因此,您可以在此处执行相同的操作:
var combinedPolicy = Policy.WrapAsync(retryPolicy, timeoutPolicy);
var outerHandler = new PolicyHttpMessageHandler(combinedPolicy);
outerHandler.InnerHandler = (DelegatingHandler)myHandler;
然后,您可以在通话中使用outerHandler
RestService.For
RestService.For<IMyService>(new HttpClient(outerHandler))
我还没有测试过它,但运行时可能需要您将最内部的处理程序设置为新的 HttpClientHandler
才能正常工作。
评论