Я добавляю токен при выполнении запроса Odata от .net core следующим образом:
var settings = new ODataClientSettings(new Uri(AppConstants.BaseLink));
settings.BeforeRequestAsync += async (HttpRequestMessage message) =>
{
var token = await _tokenService.GetCRMTokenAsync();
message.Headers.Authorization = new AuthenticationHeaderValue(token.TokenType, token.AccessToken);
};
Теперь я хочу добавить перехватчик, т. Е. Когда есть неавторизованный ответ, я хочу перехватить этот ответ, получить новый токен и отправить запрос снова.
Я написал что-то вроде этого:
settings.AfterResponseAsync += async (HttpResponseMessage response) =>
{
if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
{
var token = await _tokenService.GetCRMTokenAsync();
await _tokenService.RefreshCRMTokenAsync(token.RefreshToken);
HttpRequestMessage msg = new HttpRequestMessage();
msg = response.RequestMessage;
response = null;
msg.Headers.Authorization = new AuthenticationHeaderValue(token.TokenType, "");
var client = _httpClientFactory.CreateClient();
await client.SendAsync(msg);
}
};
Но вышеописанное не работает. Кто-нибудь знает, как заставить это работать, или каким-то другим способом добиться того же. Заранее спасибо.