Установить cookie в DelegationHandler - PullRequest
0 голосов
/ 15 марта 2019

Я вызываю API OAuth, который потенциально может обновлять мой идентификатор сеанса при каждом запросе. Я пытаюсь установить cookie идентификатора сеанса после того, как запросы сделаны в HttpClient, если он содержит заголовок идентификатора сеанса в DelegatingHandler, чтобы я мог сохранить свой cookie идентификатора сеанса действительным. Я не могу установить cookie на HttpContext.Current, потому что он будет нулевым после отправки запроса. Большинство поисковых запросов, которые я обнаружил в связи с этим, говорит об установке cookie в объекте ответа, но, поскольку я использую этот HttpClient в бэкэнде, это означает, что cookie не будет идти до конца браузера, если я после получения ответа вручную не извлеку cookie из каждого отдельного вызова, а затем передать его в http-контекст. Я предпочитаю более глобальную обработку этого в DelegationHandler, поэтому во всех вызовах с этим HttpClient встроена эта логика. Должен ли я достичь этого другим способом или мне нужно добавлять этот cookie-файл при каждом отдельном вызове этого HttpClient?

public class HeaderHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
        CancellationToken cancellationToken)
    {   
        // Here HttpContext.Current is not null
        var response = await base.SendAsync(request, cancellationToken);
        if (response?.Headers != null)
        {
            var hasSessionIdHeader = response.Headers.TryGetValues("SessionId", out var sessionIdHeaderValue);

            if (hasSessionIdHeader)
            {
                var sessionId = sessionIdHeaderValue.FirstOrDefault();
                if (sessionId != null) // this won't work because HttpContext.Current will be null
                    SaveSessionIdInCookie(sessionId);
            }
        }

        return response;
    }
}
...