WebサーバーのデフォルトプリンタでWebページを印刷しようとしています。私はthe holy grailを見つけ、それは動作しますが、ターゲットページではなくログインページを表示します。これはコントローラが在庫設定でasp.netメンバーシップを使用して認証を要求するためです。私はthis writeupフォームの認証を使用している場合はdomインターフェイスを使用することができます(私はそれだと思うが)が記載されているが、私はそれを行う方法がわからない。それはブラウザがログインページにヒットし、最終的にターゲットページに当たるようにユーザー名/パスワードをポストするように聞こえるでしょうか?進歩する最良の方法についての洞察は非常に役立つでしょう。すでにレンダリングされているページを印刷することは、これが関係しているとは想像もしませんでした。ありがとう!asp.net-mvcコントローラが認証を要求するサーバー側を印刷しようとしています
編集:これは動作します(どうやらクッキーはあなたがbrowser.Navigateメソッド呼び出しで設定することはできません一つのことである)
HttpCookie cookie = Request.Cookies[".ASPXAUTH"];
InternetSetCookie(htmlPath, ".ASPXAUTH", cookie.Value);
browser.Navigate(htmlPath);
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
dynamic ie = browser.ActiveXInstance;
ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, PRINT_WAITFORCOMPLETION);
別途:
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetSetCookie(string lpszUrl, string lpszCookieName, string lpszCookieData);
これをさらに使用して改善することができます私のコードとして名前ではなくフォームクッキーを具体的に取得するコード。
ありがとうございます!私はそこを見ていたはずです。私は近いと思いますが、まだログインしています。私の編集を参照してください。 –
は、文字列に両方のクッキーを追加するなど、ブラウザのドキュメントクッキーがまだnullである私のローカルを見ると、さまざまなことを試みました。何が欠けているのでしょうか?ありがとうございます –
@Vince、なぜsessionStateセクションを使用してクッキー名を読み取っていますか?ここで認証について話しています。セッションではありません。それは同じことではありません。代わりにこれを行う: 'Request.Cookies [FormsAuthentication.FormsCookieName]'。 –