将 cookie 从当前 HttpContext 传输到新创建的 HttpClient 请求的简单方法

Simple way to transfer cookies from current HttpContext into new created HttpClient request

我正在尝试包装一些 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。

有什么方法可以将 cookie 从我当前的 HttpContex 传输到 HttpClient Post 调用中?我知道,我可以使用 CookieContainerHttpClientHandler 并将所有这些东西传递给 HttpClient,但我想使用更优雅的东西。

只需从传入请求中获取 Cookie header 并添加到传出请求中。在单个请求上设置 header 需要显式创建 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);