HttpClient不在CookieContainer中存储cookie

我正在使用VS2010 + .NET 4.0 + System.Net.Http (来自Nuget )。

由于我无法理解的原因,我在HttpResponseMessage收到的会话cookie不会自动保存在HttpClient CookieContainer 。 这是我的代码的样子:

 CookieContainer cookies = new CookieContainer(); HttpClientHandler handler = new HttpClientHandler(); handler.CookieContainer = cookies; HttpClient client = new HttpClient(handler); Uri site = new Uri("https://www.mywebsite.com"); var response1 = client.SendAsync(new HttpRequestMessage(HttpMethod.Get,site)).Result; 

我可以在响应头中看到我有以下内容:

 Set-Cookie: JSESSIONID=FC8110E434C2C6DAB78B4E335024A639; Path=/member; Secure 

但是我的cookie容器仍然是空的…为什么?

我想问题是你的cookie是安全的 。 问题是,CookieContainer不会在后续HTTP请求中将安全cookie发送回服务器。 它可能是一个错误,或者它背后有一些原因。

解决方法是手动将cookie重新添加到CookieContainer。 这样,cookie将在HTTP请求标头中发回,因为当您将cookie发送回服务器时,不会定义安全性

有关更多信息,请参阅此文章 。

使用这段代码从响应中检索cookie:

 ///  /// Read web cookies ///  public static CookieContainer ReadCookies(this HttpResponseMessage response) { var pageUri = response.RequestMessage.RequestUri; var cookieContainer = new CookieContainer(); IEnumerable cookies; if (response.Headers.TryGetValues("set-cookie", out cookies)) { foreach (var c in cookies) { cookieContainer.SetCookies(pageUri, c); } } return cookieContainer; } 

也许问题是您的请求Url路径是网站的根目录(“/”),但您的Set-Cookie标头指示路径为“/ member”。