私はページ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のかなり正しいと感じる。
理想的には、私はこのための良い基準に従いたいと思います。しかし、私はどこを見るか分からない。
そのページがフォームページであることを確認するだけで、ユーザーはそのURLをコピーして各ページの読み込み時にファイルに直接アクセスすることができません。 – CoderMarkus