В настоящее время у меня есть этот запрос:Как использовать Полли с Flurl.Http?
await url
.SetQueryParams(queryString)
.SetClaimsToken()
.GetJsonAsync<T>()
я хотел бы начать использовать Polly (https://github.com/App-vNext/Polly) в настоящее время для обработки повторных попыток и обеспечить лучший пользовательский опыт. Например, не «подвешивание» пользователя при первой попытке из-за плохого сетевого подключения. Это пример, который я пытался использовать:
int[] httpStatusCodesWorthRetrying = { 408, 500, 502, 503, 504 };
Policy
.Handle<HttpException>()
.OrResult<HttpResponse>(r => httpStatusCodesWorthRetrying.Contains(r.StatusCode))
.WaitAndRetryAsync(new[] {
TimeSpan.FromSeconds(1),
TimeSpan.FromSeconds(2),
TimeSpan.FromSeconds(3)
})
.ExecuteAsync(await url...)
Но для этого требуется HttpResponse. Как вы можете видеть из моего примера Flurl, он возвращает T
, хотя это httpResponse. T
- это тип, используемый для десериализации StringContent
.
Этот первый пример не работает вообще, так как я использую его внутри PCL, и я не могу получить ссылку на System.Web
. Так что я попытался это:
Policy
.HandleResult(HttpStatusCode.InternalServerError)
.OrResult(HttpStatusCode.BadGateway)
.OrResult(HttpStatusCode.BadRequest)
.WaitAndRetryAsync(new[] {
TimeSpan.FromSeconds(1),
TimeSpan.FromSeconds(2),
TimeSpan.FromSeconds(3)
})
.ExecuteAsync(async() =>
{
await url...
});
Но это один и не работает, потому что Polly ожидает HttpStatusCode
в качестве возвращаемого типа. Поэтому мой вопрос: как я могу рассказать polly обрабатывать те HttpStatusCode
s и все еще разрешить возврат типа T
?
Спасибо!
@eestein Сделаны некоторые незначительные изменения синтаксиса после загрузки flurl. Это вас сортирует? –
Спасибо за ваш ответ, сейчас проверим! – eestein
Спасибо, мне удалось адаптировать мой код, используя ваши примеры! :) – eestein