Simple.OData.Client Перехватывает неавторизованные запросы в .Net core 2.1 и выше - PullRequest
0 голосов
/ 19 марта 2019

Я добавляю токен при выполнении запроса 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);
            }
        };

Но вышеописанное не работает. Кто-нибудь знает, как заставить это работать, или каким-то другим способом добиться того же. Заранее спасибо.

...