2011-01-21 1 views
0

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

これをさらに使用して改善することができます私のコードとして名前ではなくフォームクッキーを具体的に取得するコード。

答えて

0

WebBrowserコントロールには、追加のHTTPヘッダーを要求に渡すことができるNavigateメソッドのオーバーロードメソッドがあります。明らかにあなたがあなたのウェブサイトが要求クッキーから取得した値を期待し、value認証クッキーの名前でauthCookieを交換する必要が

browser.Navigate(htmlPath, null, null, "Cookie: authCookie=value" + Environment.NewLine); 

:最後の引数では、このようなクッキーヘッダを渡すことができます。

+0

ありがとうございます!私はそこを見ていたはずです。私は近いと思いますが、まだログインしています。私の編集を参照してください。 –

+0

は、文字列に両方のクッキーを追加するなど、ブラウザのドキュメントクッキーがまだnullである私のローカルを見ると、さまざまなことを試みました。何が欠けているのでしょうか?ありがとうございます –

+0

@Vince、なぜsessionStateセクションを使用してクッキー名を読み取っていますか?ここで認証について話しています。セッションではありません。それは同じことではありません。代わりにこれを行う: 'Request.Cookies [FormsAuthentication.FormsCookieName]'。 –

関連する問題