Доступ к ASP.NET_SessionId на HttpWebResponse C#

Я пытаюсь получить ASP.NET_SessionId из HttpWebResponse, но кажется, что такие данные не приходят в ответ. В основном я пытаюсь смоделировать некоторые шаги на некоторых страницах, где требуется аутентификация. Проблема не в аутентификации, моя проблема в том, чтобы получить ASP.NET_SessionId после аутентификации, чтобы я мог использовать его в своих будущих запросах / шагах.

Из Chrome в разделе инструменты разработчика> сеть я вижу ASP.NET_SessionId в заголовках, но он не входит в мой HttpWebResponse. Любая идея, почему это происходит? Вот мой код:

 var httpWebRequest              = (HttpWebRequest) WebRequest.Create(url);
 httpWebRequest.UserAgent        = "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36";             httpWebRequest.Method           = "POST";
 httpWebRequest.ContentType      = "application/x-www-form-urlencoded";
 httpWebRequest.ContentLength    = 0;
 var httpWebResponse             = (HttpWebResponse) httpWebRequest.GetResponse();

После моего запроса я должен увидеть заголовок ASP.NET_SessionId Set-Cookie, но не повезло. Любая идея?

Я видел, как некоторые люди говорят, что

httpWebResponse.Headers["ASP.NET_SessionId"]

или же

httpWebResponse.Headers["SESSION_ID"]

должен работать, но нет, ни заголовок идентификатора сеанса не установлен, ни какой-либо Cookie.

1 ответ

После многих исследований ответ был здесь

По сути, мы должны сохранять одну и ту же ссылку на объект CookieContainer во всех запросах. Я извлекал некоторые Set-Cookie из ответов и добавлял их в свои запросы, но теперь мне не нужно ничего делать, CookieContainer управляет всем этим прозрачно.

Set-Cookie из ответов устанавливается на CookieContainer вашего запроса. Они нашли способ решить возможные проблемы с безопасностью, поэтому не теряйте больше времени и просто сохраняйте ссылку на свой CookieContainer, потому что вы не сможете получить доступ к идентификатору сеанса (и вам это не нужно).

Теперь есть пример моего кода.

var cookieContainer = new CookieContainer();

var httpWebRequest1 = (HttpWebRequest) WebRequest.Create(url);
httpWebRequest1.CookieContainer = cookieContainer;

// do the request and some logic

var httpWebRequest2 = (HttpWebRequest) WebRequest.Create(anotherUrl);
httpWebRequest2.CookieContainer = cookieContainer; // same cookieContainer reference

Теперь все работает отлично, надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам