2012-02-01 12 views
5

私はページURLを公開しています 例:mysite.com/disclaimer/someinfo このページには同意書があり、ユーザーが同意ボタンをクリックするとPDFファイルが添付ファイルとしてストリーミングされます。Response.WriteFile&Response.Redirect

このURLの目的はユーザーがこのURLを共有できることですが、リンクをたどった他のユーザーはファイルをダウンロードする前に同意書を読む必要があります。実際のファイルにはURLはありませんが、サーバー上の他の場所に保存されていますので、[[同意する]]ボタンをクリックするだけでファイルをダウンロードできます。

しかし、私が難しいと思うのは、ボタンをクリックしてダウンロードを開始した後、そのページを「離れる」ようにしたいということです。ボタンの付いたページは画面上にとどまります。理想的には、彼らは彼らが来たページにリダイレクトされるでしょう。私はJavascriptやCookieを必要としたくはない。リファラーは、初期ページのロード時にフォーム上の非表示フィールドに格納されます。

さまざまなアプローチを試しましたが、そのファイルでヘッダーに307リダイレクトを書き込もうとしましたが、ユーザーにポストデータがリダイレクトされているという警告が表示されました。私が下にあるコードは、メタリフレッシュをサポートするブラウザ(Firefox、Chrome/SafariではなくIE7)でのみ動作します。

これはなぜ動作しないのかのロジックを見ることができます。ブラウザには1つの応答があり、それは期待どおりのファイルです。ファイルを送信し、ブラウザを別のページにリダイレクトする正しい方法は何でしょうか。それはユーザーから感じます。ボタンをクリックするとこの「承認」ページが消えるはずです。

私が持っている

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.UrlReferrer != null & Request.UrlReferrer.ToString() != "") 
     { 
      Uri referrer = Request.UrlReferrer; 
      if (!IsPostBack) 
      { hfReferrer.Value = Request.UrlReferrer.ToString(); } 
     } 
    } 

    protected void buttonAccept_Click(object sender, EventArgs e) 
    { 
     //stream file 
     Node nodeCurrent = Node.GetCurrent(); 
     string fileName = nodeCurrent.GetProperty("documentFile").Value.ToString(); 
     System.IO.FileInfo file = new System.IO.FileInfo(fileName); 
     if (file.Exists) //set appropriate headers 
     { 
      Response.Clear(); 

      if (hfReferrer.Value !="") 
      {Response.AddHeader("Refresh", string.Format("3; URL={0}", hfReferrer.Value));} 

      Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
      Response.AddHeader("Content-Length", file.Length.ToString()); 
      Response.ContentType = "application/pdf"; 

      // write file to browser 
      Response.WriteFile(file.FullName); 
      Response.End(); 
     } 

私はジャバスクリプト/ポップアップを使用する必要がないことを好むだろうなど 現在、ユーザーがちょうど別のページに移動するためのリンクをクリックする必要がありますが、これは」doesnのかなり正しいと感じる。

理想的には、私はこのための良い基準に従いたいと思います。しかし、私はどこを見るか分からない。

答えて

2

少し違う行為を試みることをお勧めします。 buttonAccept_Clickイベントハンドラで、ユーザーを感謝のページにリダイレクトします。このページのPage_Loadには、ファイルをダウンロードするためのコードがあります。 これは実装が非常に簡単で、ユーザーにとってより良いエクスペリエンスを提供します。

+0

そのページがフォームページであることを確認するだけで、ユーザーはそのURLをコピーして各ページの読み込み時にファイルに直接アクセスすることができません。 – CoderMarkus

関連する問題