Я пытаюсь обработать все 401 ответов с помощью AsyncRetryPolicy .
Некоторые примечания:
- Я использую Xamarin.Forms
- Я использую Установите , но без HttpClientFactory
Вот политика повторных попыток:
var unauthorizedPolicy = Policy.Handle<ApiException>(ex => ex.StatusCode == HttpStatusCode.Unauthorized)
.RetryAsync(3, async (exception, retryCount) =>
{
Logger.Instance.Info($"Unauthorized, token probably expired, retry count: {retryCount}");
try
{
Logger.Instance.Error(exception.Message);
Logger.Instance.Info("Retrying request and retrive refresh token");
var token = await _authService.SignInSilentlyAsync();
await SecureStorage.SetAsync(Constants.PreferencesNames.Token.Value, token);
}
catch (Exception ex)
{
Logger.Instance.Error(ex.Message);
Logger.Instance.Info("SignInSilentlyAsync failed, going to login page");
NavigationService.ReplaceRoot(new LoginPageViewModel());
}
});
Это выполняется в другом классе:
result = await _taskManager._defaultPolicyForHttpRequests // the above defined unauthorizedPolicy
.ExecuteAndCaptureAsync<T>(async () => await task)
.ConfigureAwait(false);
Обычно, когда срок действия токена истек, я пытаюсь и успешно получаю новый токен, но кажется, что каждая попытка все еще использует старый:
Как видно из журналов, токен успешно получен, но я думаю, что старый используется при повторной попытке вызова. Я не могу быть уверен, потому что вызов больше не регистрируется.
Это подводит меня ко второму вопросу, есть ли способ log и debug каждый HTTP-вызов, который Полли пытается?