У меня есть типизированный клиент, который я настроил в службах, и я использую Полли, чтобы повторить попытки для временных сбоев.
Цель: я хочу использовать Polly для реализации токена обновления, всякий раз, когда от целевого сайта есть ответ 401, я хочу, чтобы Polly обновил токен и продолжил первоначальный запрос снова.
Проблема в том, что типизированный клиент имеет все методы api и метод токена обновления, когда запрос инициируется из типизированного клиента, как мне снова получить доступ к типизированному клиенту, чтобы вызвать токен обновления и продолжить первоначальный запрос?
Context в onRetry обеспечивает некоторую поддержку для добавления любого объекта в словарь, но я не могу получить доступ к методу SetPolicyExecutionContext ('someContext'), и я не хочу добавлять это во все методы перед началом вызова как есть много API.
// In Service Configuration
// Refresh token policy
var refreshTokenPolicy = Polly.Policy.HandleResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.Unauthorized)
.RetryAsync(1, (response, retrycount, context)) =>
{
if(response.Result.StatusCode == HttpStatusCode.Unauthorized)
{
// Perform refresh token
}
}
// Typed Client
services.AddHttpClient<TypedClient>();
public class TypedClient
{
private static HttpClient _client;
public TypedClient(HttpClient client)
{
_client = client;
}
public string ActualCall()
{
// some action
}
public string RefreshToken()
{
// Refresh the token and return
}
}