Простой способ передачи файлов cookie из текущего HttpContext в новый созданный запрос HttpClient

Я пытаюсь обернуть некоторый запрос API

[Route("foo")]
public Task Foo()
{
    using var http = new HttpClient();
    return http.PostAsync(
                  Endpoint,
                  new FormUrlEncodedContent(new Dictionary<string, string>
                  {
                      { ClientId, "ClientId" },
                  }),
                  CancellationToken.None)
            .ConfigureAwait(false);
}

и проблема с этим. Причина в файлах cookie, которые использует вызываемая конечная точка.

Есть ли способ перенести куки из моего текущего HttpContex в HttpClient Post call? Я знаю, что могу использовать CookieContainer, HttpClientHandler и передать все это в HttpClient, но я бы хотел использовать что-то более элегантное.

Вам достаточно элегантности AddHeaderPropagationпромежуточного программного обеспечения?

Peter Csala 10.12.2020 11:10

@PeterCsala более чем достаточно, осталось только мигрировать на ядро ​​3.1

anatol 10.12.2020 17:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
620
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто возьмите заголовок Cookie из входящего запроса и добавьте к исходящему. Установка заголовка для отдельного запроса потребует явного создания HttpRequestMessage и использования HttpClient.SendAsync для его отправки, но это довольно просто:

var outgoing = new HttpRequestMessage(HttpMethod.Post, uri);
outgoing.Content = new FormUrlEncodedContent(...);
if (Request.Headers.TryGetValue("Cookie", out var cookies))
{
    outgoing.Headers.TryAddWithoutValidation("Cookie", cookies);
}
await http.SendAsync(outgoing);

спасибо, но концептуально это отличается от использования CookieContainer?

anatol 14.12.2020 16:54

Да, это сильно отличается. CookieContainer — это высокоуровневая абстракция для имитации пользовательских «сеансов» так, как это делает браузер, и она тесно связана с HttpClient/Handler. Все, что вы указали в своем вопросе, вы хотели бы избежать. Это простой способ переслать заголовок файла cookie напрямую для одного запроса.

Todd Menier 14.12.2020 17:33

Другие вопросы по теме