Воспроизвести HttpCall из Flurl - PullRequest
0 голосов
/ 17 ноября 2018

Я пишу обработчик ошибок для обновления токенов.Когда я получаю ошибку expired_token, я обновляю токен и хочу повторить запрос, но я не уверен, как

public async Task HandleErrorAsync(HttpCall call)
{
      var exception = call.Exception;
      if (exception is FlurlHttpException)
      {
         FlurlHttpException ex = (exception as FlurlHttpException);
         var errorResponse = await ex.GetResponseJsonAsync<ErrorResponse>();

         if(errorResponse.Errors.Any(x => x.Id == EXPIRED_TOKEN))
         {
             await this.RefreshOAuthToken();
             //How can I Replay the request
             //call.Response = call.Request.Replay(); 
             call.ExceptionHandled = true;
         }
     }
}

После обновления токена у меня есть доступ кHttpCall Объект, который просто выбросил просроченную ошибку токена.Я хотел бы повторить запрос и заменить ответ, но я не уверен, как это сделать.

Как я могу воспроизвести запрос от HttpCall во Flurl?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Может быть, вы хотите взглянуть на библиотеку c # с именем polly.Я думаю, что это решает большинство проблем, с которыми сталкивается разработчик.https://github.com/App-vNext/Polly

Вы можете использовать политику повторных попыток от polly или другую, соответствующую вашим потребностям

        // Retry multiple times, calling an action on each retry 
// with the current exception and retry count
Policy
    .Handle<SomeExceptionType>()
    .Retry(3, (exception, retryCount) =>
    {
        // do something 
    });
0 голосов
/ 18 ноября 2018

Я обнаружил перегрузку для общей отправки моего запроса, я сделал метод расширения

public static async Task<HttpCall> Replay(this HttpCall call)
{
    call.Response = await call.FlurlRequest.SendAsync(call.Request.Method, call.Request.Content);
    return call;
}
...