我正在使用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容器仍然是空的......为什么?
答案 0 :(得分:15)
使用这段代码从响应中检索cookie:
/// <summary>
/// Read web cookies
/// </summary>
public static CookieContainer ReadCookies(this HttpResponseMessage response)
{
var pageUri = response.RequestMessage.RequestUri;
var cookieContainer = new CookieContainer();
IEnumerable<string> cookies;
if (response.Headers.TryGetValues("set-cookie", out cookies))
{
foreach (var c in cookies)
{
cookieContainer.SetCookies(pageUri, c);
}
}
return cookieContainer;
}
答案 1 :(得分:8)
我想问题是你的cookies 安全。问题是,CookieContainer不会在后续HTTP请求中将安全cookie发送回服务器。它可能是一个错误,或者它背后有一些原因。
解决方法是手动将Cookie重新添加到CookieContainer。这样,cookie将在HTTP请求标头中发回,因为当您将cookie发送回服务器时,不会定义 secure 。
有关详细信息,请参阅this article。
答案 2 :(得分:0)
也许问题在于您的请求网址路径是网站根目录(“ /”),但是Set-Cookie标头指示路径为“ / member”。