我试图以语法方式检索ASPXAUTH cookie但没有成功。发布到此论坛的similar question证明没有用。
我的代码如下所示。一个已知的问题是确保为请求分配CookieContainer,我已经完成了。另外,我可以在调试器中运行Web应用程序,看看请求是否有效 - 用户确实已经过身份验证并且调用了FormsAuthentication.SetAuthCookie()
。
我的代码如下所示。在最后一行中,response.Cookies
始终为空(为了简洁起见,using
和close()
语句已被移除。
对stevemegson的回应:
惊人!如果我查询CookieContainer,cookie确实存在:
CookieCollection cookies = cookieContainer.GetCookies(new Uri(BaseUri));
Cookie cookie = null;
foreach (Cookie c in cookies)
{
if (c.Name == ".ASPXAUTH")
{
cookie = c;
break;
}
}
return cookie;
原始代码:
string uri = string.Format("{0}/Account.aspx/LogOn", BaseUri);
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.CookieContainer = cookieContainer;
request.Method = "POST";
string postData = string.Format("UserName={0}&Password={1}&RememberMe=true", UserName, Password);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Cookie cookie = response.Cookies[".ASPXAUTH"]; // Collection is always empty; returns null!!
答案 0 :(得分:2)
没有什么看起来明显错误,但我接下来要检查的是:
如果您阅读response.Headers
的内容,是否可以看到Set-Cookie标头?如果可以避免,你真的不想从标题中解析cookie值,但这将确认标题至少可以恢复正常。
如果直接使用cookieContainer.GetCookies(request.RequestUri)
查询CookieContainer,是否可以看到Cookie?