質問

デスクトップアプリからWebアプリのページに移動したいと思います。 「問題ありません」、「正しいURLでデフォルトのブラウザを起動するだけです」と言うのが聞こえます。ただし、WebアプリはASP.NETフォームの認証を使用しており、ユーザーはデスクトップアプリで同じ資格情報をすでに認証しているため、ログインページを表示したくありません。

それは十分に単純に聞こえますが、私がしなければならないのは、Webアプリのログインページからのポストバックを偽造して、デスクトップアプリからHTTP投稿を発することです。 Webアプリは、認証チケットとセッションステートクッキーを設定し、私に返送します。IECookieストアに保存します。その後、目的のページに移動でき、Webアプリはすでに認証されていると考えるでしょう。

HTTP投稿を構築し、それを送信し、適切な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() 働き。そして見て!誰か インタートップを書きました すでにあなたのために。ただし、その正しさを確認する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top