Я вызываю 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;
}
}