【发布时间】:2021-07-15 20:42:56
【问题描述】:
使用 .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 标头值是什么,如何清除或删除它?
我还检查了这个SO question about extra cookies being sent,这与我的情况相似,但它似乎不适用于 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());
【问题讨论】:
-
像你一样添加
UseCookies = false,帮我解决这个问题。
标签: c# cookies dotnet-httpclient .net-core-3.1