Доступ к 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
Теперь все работает отлично, надеюсь, это кому-нибудь поможет.