将 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 调用中?我知道,我可以使用 CookieContainer
、HttpClientHandler
并将所有这些东西传递给 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);
我正在尝试包装一些 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 调用中?我知道,我可以使用 CookieContainer
、HttpClientHandler
并将所有这些东西传递给 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);