为什么request.Headers.Add(" Cookie"," ...")无效?

时间:2018-05-03 16:43:21

标签: c# cookies

我刚遇到这种奇怪的行为,我可以使用以下代码重现:

var request = new HttpRequestMessage(new HttpMethod("POST"), "/api/mymethod");
request.Headers.Add("Cookie", "mycookie");
request.Headers.Add("Cookie2", "mycookie");
request.Content = new StringContent("<foo></foo>", Encoding.UTF8, "application/xml");
return httpClient.SendAsync(request);

然后我使用necat记录请求,我看到Cookie2存在,但Cookie不存在!

POST /api/mymethod HTTP/1.1
Cookie2: mycookie
Content-Type: application/xml; charset=utf-8
Host: localhost:7777
Content-Length: 11
Expect: 100-continue
Connection: Keep-Alive

<foo></foo>

似乎HttpRequestMessage不顾一切地忽略了Cookie标题,我想知道它为什么会这样。

有没有办法强制添加Cookie?我想也许他们这样做是为了强制执行良好的编码实践,但是现在我正在制作一个简短的一次性脚本来自动执行手动任务(即使cookie在我的代码中是硬编码的),我对此行为感到惊讶。

找到答案:

https://stackoverflow.com/a/13287224/492336开始,您可以设置HttpClientHandler UseCookies设为false,然后就可以了:

HttpClient httpClient = new HttpClient(new HttpClientHandler { UseCookies = false }) { BaseAddress = new Uri(ConfigurationManager.AppSettings["server"]) };

无论如何,你可能不应该将它用于非一次性代码。

0 个答案:

没有答案