3

Я хочу перейти на страницу в веб-приложении из настольного приложения. «Нет проблем», я слышал, вы говорите: «Просто запустите браузер по умолчанию с правильным URL». Тем не менее, веб-приложение использует ASP.NET Forms Authentication, и пользователи не хотят видеть страницу входа, потому что они уже прошли аутентификацию с теми же учетными данными в настольном приложении.Написание файлов cookie из CookieContainer в хранилище cookie IE

Это звучит достаточно просто, все, что мне нужно сделать, это выпустить HTTP POST из приложения для настольных компьютеров, что приведет к обратной передаче с страницы входа в веб-приложение. Затем веб-приложение установит свой билет аутентификации и файлы cookie состояния сеанса, вернет их мне, и я сохраню их в хранилище cookie IE. Затем я смогу перейти на нужную страницу, и веб-приложение подумает, что оно уже завершено.

У меня есть рабочий код, который создает HTTP POST, отправляет его и получает действительный ответ, содержащий правильные файлы cookie. Однако я не могу понять, как записать их в хранилище cookie IE. Может кто-то указать мне верное направление?

Пример кода:

var requestUrl = Properties.Settings.Default.WebsiteLoginPageUrl; 

var requestEncoding = Encoding.GetEncoding(1252); 

// Simulated login postdata 
var requestText = string.Format(
    "__VIEWSTATE={2}&__EVENTTARGET={3}&__EVENTARGUMENT={4}&__EVENTVALIDATION={5}&userNameText={0}&passwordText={1}&submitButton=Log+In", 
    HttpUtility.UrlEncode(Properties.Settings.Default.UserName), 
    HttpUtility.UrlEncode(Properties.Settings.Default.Password), 
    Properties.Settings.Default.FakeViewState, 
    Properties.Settings.Default.FakeEventTarget, 
    Properties.Settings.Default.FakeEventArgument, 
    Properties.Settings.Default.FakeEventValidation); 

var request = (HttpWebRequest) WebRequest.Create(requestUrl); 
request.Method = "POST"; 
request.Accept = "*/*"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = requestEncoding.GetByteCount(requestText); 
request.Headers.Add(HttpRequestHeader.CacheControl, "no-cache"); 
request.AllowAutoRedirect = false; 
request.KeepAlive = false; 
request.CookieContainer = new CookieContainer(); 

using(var writer = new StreamWriter(request.GetRequestStream(), requestEncoding)) { 
    writer.Write(requestText); 
} 

var response = (HttpWebResponse) request.GetResponse(); 

// TODO: Grab the response cookies and save them to the interactive desktop user's cookie store. 

Process.Start(new ProcessStartInfo { 
    FileName = Properties.Settings.Default.WebsiteTargetPageUrl, 
    UseShellExecute = true, 
}); 

ответ

3

Вы должны вызвать неуправляемый InternetSetCookie() функцию. И посмотри! Кто-то wrote the interop для вас уже. Однако вы должны проверить его правильность.

+0

Спасибо, Джефф, это похоже на то, что мне нужно. Просто нужно выяснить, как перевести свойства файла cookie .NET в правильный формат. :-) –

+0

Вызовите InternetGetCookie на известном cookie и посмотрите, как он выглядит. –

+0

Он содержит смешные данные, которые не соответствуют всем свойствам объекта .NET Cookie. Я сейчас реконструирую формат, и я дам вам знать. –

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

  • Нет связанных вопросов^_^