是否可以将HttpClient配置为不保存cookie?

时间:2019-04-03 11:10:08

标签: c# asp.net-core cookies dotnet-httpclient

我有一个简单的Asp.Net Core WebApi,我在其中使用HttpClient发送一些自定义的Web请求。我这样使用HttpClient

services.AddHttpClient<IMyInterface, MyService>()
...

public class MyService : IMyInterface
{
    private readonly HttpClient _client;

    public MyService(HttpClient client)
    {
        _client = client;
    } 

    public async Task SendWebRequest()
    {
        var url = "https://MyCustomUrl.com/myCustomResource";
        var request = new HttpRequestMessage(HttpMethod.Get, url);
        var response = await _client.SendAsync(request);
        ...
    }
}   

我注意到,当我发送多个请求时,HttpClient将它收到的带有第一个响应的cookie保存在Set-Cookie标头中。它将这些cookie添加到连续的 request 标头中。 (我已经用fiddler进行了检查)。流量:

//First requst
GET https://MyCustomUrl.com/myCustomResource HTTP/1.1

//First response
HTTP/1.1 200 OK
Set-Cookie: key=value
...

//Second request
GET https://MyCustomUrl.com/myCustomResource HTTP/1.1
Cookie: key=value

//Second response
HTTP/1.1 200 OK
...

是否可以强制HttpClient不添加Cookie?

这仅在同一会话中发生,因此,如果我处置HttpClient,则不会添加cookie。但是处理HttpClient可能会带来其他问题。

1 个答案:

答案 0 :(得分:6)

请参见HttpClientHandler.UseCookies

  

获取或设置一个值,该值指示处理程序是否使用CookieContainer属性存储服务器cookie,并在发送请求时使用这些cookie。

所以您需要这样做:

var handler = new HttpClientHandler() { UseCookies = false };
var httpClient = new HttpClient(handler);

如果您在asp.net核心中使用HttpClientFactory,则this answer建议这样做的方法是:

services.AddHttpClient("configured-inner-handler")
    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() { UseCookies = false });