我嘗試從語法上檢索ASPXAUTH cookie,但沒有成功。 A similar question發佈到此論壇沒有證明有幫助。以編程方式獲取.ASPXAUTH cookie值II
我的代碼如下所示。一個已知的疑難問題是確保將cookieContainer分配給請求,我已經完成了。另外,我可以在調試器中運行Web應用程序,並看到請求是有效的 - 用戶確實通過了身份驗證,並調用了FormsAuthentication.SetAuthCookie()
。
我的代碼如下所示。在最後一行中,response.Cookies
始終爲空(爲簡潔起見,刪除了using
和close()
語句)。
迴應stevemegson:
- 沒有,response.Headers集合不包含 「設置Cookie」 頭
驚人!如果我查詢的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!!
請參閱上面的修改。我確實可以通過調用cookieContainer.GetCookies()來檢索cookie。這並不回答爲什麼response.Cookies是空的,但它解決了我眼前的問題。非常感謝。 – Brett 2010-08-18 18:17:32