将Cookie从CookieContainer写入IE cookie商店

我想从桌面应用程序导航到Web应用程序中的页面。 “没问题”,我听到你说,“只需使用正确的URL启动默认浏览器”。 但是,Web应用程序使用ASP.NET窗体身份validation,用户不希望看到登录页面,因为他们已使用桌面应用程序中的相同凭据进行身份validation。

这听起来很简单,我所要做的就是从桌面应用程序发出一个HTTP POST,假装从Web应用程序的登录页面回发。 然后,Web应用程序将设置其身份validation票证和会话状态cookie,将它们返回给我,然后我将它们存储在IE cookie存储区中。 然后我可以导航到所需的页面,Web应用程序会认为它已经过身份validation。

我有一些工作代码构建HTTP POST,发送它,并获得包含正确的cookie的有效响应。 但是,我看不出如何将它们写入IE cookie商店。 谁能指出我正确的方向?

示例代码:

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, }); 

您需要调用非托管的InternetSetCookie()函数。 看! 有人已经为你写了互操作 。 你应该validation它的正确性。