首页 > 解决方案 > HttpClient 正在发送额外的 Cookie

问题描述

使用 .NET Core 3.1 DI,我使用 Azure 函数内的 HttpClient 实例将数据发送到外部 API。

var clientRequest = new HttpRequestMessage(HttpMethod.Post, clientConfig.BaseURL + RequestParam);

string payloadBody = GenerateLoginPayload(clientConfig.Username, clientConfig.Password);
clientRequest.Content = new StringContent(payloadBody, Encoding.UTF8, "application/json");
clientRequest.Headers.Clear();

var response = await _api.SendAsync(clientRequest);

如您所见,我什至清除了clientRequest标题。但是,检查 Fiddler 时,它仍在发送额外的 Cookie 标头。这弄乱了我们的请求,至于 API,必须发送过去的 Cookie。

Cookie: KEY_PHPSESSID=HehRVwcsmiUmoxO4zYaOpO1B9hm%2BfAK9igvuRw4YjgA%3D%3AJ7Bgip94EQjfJ%2FSt5RcnFTY3jcZ%2FlChCoyK54v%2Fu%2FJI%3D
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 87

我的问题是,添加额外的 Cookie 标头值是什么,如何清除或删除它?

我还检查了这个关于发送额外 cookie 的问题,这与我的情况类似,但似乎不适用于 Azure Functions 和 .NET Core,因为我没有任何参考Windows.Web.Http.HttpClient

这也是我注册 HttpClient 的方式,并且_api.SendAsync()在多个端点上多次重复使用,并且 Cookie 可能源自之前的调用。如何确保 Cookie 不会流向其他请求?

builder.Services.AddHttpClient<IApiCaller, ApiCaller>()
  .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() { UseCookies = false })
  .AddPolicyHandler(HttpRetryPolicies.RetryWithJitter());

标签: c#cookiesdotnet-httpclient.net-core-3.1

解决方案


也许它是 HttpClient 本身的 DefaultRequestHeader 。

你可以试试_api.DefaultRequestHeaders.Clear();


推荐阅读