我想从桌面应用程序导航到web应用程序中的页面。“没问题”,我听到你说,“只要用正确的URL启动默认浏览器就行了”。但是,web应用程序使用ASP.NET窗体身份验证,用户不想看到登录页面,因为他们已经在桌面应用程序中使用相同的凭据进行了身份验证。
这听起来很简单,我所要做的就是从桌面应用程序发出一个HTTP POST,从web应用程序的登录页面伪造回发。然后,web应用程序将设置其身份验证票证和会话状态cookie,并将它们返回给我,我会将它们存储在IE cookie存储中。然后,我可以导航到所需的页面,web应用程序会认为它已经通过了身份验证。
我有一些可以工作的代码来构造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,
});发布于 2010-09-08 23:45:47
您需要调用非托管InternetSetCookie()函数。你看!已经有人给你发wrote the interop了。不过,您应该验证它的正确性。
https://stackoverflow.com/questions/3668392
复制相似问题