Ram*_*nas 2 c# cookies dotnet-httpclient asp.net-core
我有一个简单的Asp.Net CoreWebApi,HttpClient用于发送一些custum 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);
...
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到,当我发送多个请求时,HttpClient将它收到的带有第一次响应的 cookie保存在Set-Cookie标头中。它将那些cookie添加到连续的请求标头中。(我已经用进行了检查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
...
Run Code Online (Sandbox Code Playgroud)
有没有办法强制HttpClient不添加cookie?
这仅在同一会话中发生,因此,如果我要处理,HttpClient则不会添加cookie。但是处理HttpClient可能会带来其他问题。
请参阅HttpClientHandler.UseCookies。
获取或设置一个值,该值指示处理程序是否使用CookieContainer属性存储服务器cookie,并在发送请求时使用这些cookie。
因此,您需要执行以下操作:
var handler = new HttpClientHandler() { UseCookies = false };
var httpClient = new HttpClient(handler);
Run Code Online (Sandbox Code Playgroud)
如果您HttpClientFactory在asp.net核心中使用,则此答案表明执行此操作的方法是:
services.AddHttpClient("configured-inner-handler")
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler() { UseCookies = false });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |