Я пытаюсь получить cookie ASPXAUTH программно без успеха. A similar question, размещенный на этом форуме, не помогло.Получите значение cookie .ASPXAUTH программно II
Мой код показан ниже. Один из известных способов получения данных - обязательно указать CookieContainer на запрос, который я сделал. Кроме того, я могу запускать веб-приложение в отладчике и видеть, что запрос действителен - пользователь действительно аутентифицирован и вызывается FormsAuthentication.SetAuthCookie()
.
Мой код показан ниже. В последней строке response.Cookies
всегда пуст (using
и close()
выписки для краткости).
Ответы на stevemegson:
- Нет, коллекция response.Headers не содержат "Set-Cookie" заголовок
Удивительно! Если я запросить CookieContainer, печенье действительно присутствует:
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!!
См. Правки выше. Я действительно могу извлечь файлы cookie, вызывая cookieContainer.GetCookies(). Это не отвечает на то, почему response.Cookies пуст, но он решает мою непосредственную проблему. Большое спасибо. – Brett