2010-08-18 6 views
1

Я пытаюсь получить 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!! 

ответ

2

Ничто не выглядит явно не так, но следующие вещи, которые я бы проверить :

Вы можете увидеть заголовок Set-Cookie, если вы читаете содержимое response.Headers? Вы действительно не хотите разбирать значение cookie из заголовка, если можете его избежать, но это подтвердит, что заголовок, по крайней мере, вернется в норму.

Вы видите файл cookie, если вы запрашиваете CookieContainer напрямую с помощью cookieContainer.GetCookies(request.RequestUri)?

+0

См. Правки выше. Я действительно могу извлечь файлы cookie, вызывая cookieContainer.GetCookies(). Это не отвечает на то, почему response.Cookies пуст, но он решает мою непосредственную проблему. Большое спасибо. – Brett

Смежные вопросы