0

ファイルのダウンロード後に同じページにリダイレクトする必要があります。

response.redirect と言うと、HTTP ヘッダーが送信された後にリダイレクトできませんと表示されます

誰かがこれで私を助けることができますか?

ionic.zip を使用してファイルを圧縮し、ダウンロードしています。

PS:質問をより明確にする必要があるかどうか教えてください。説明できます:(

    Response.Clear();
    Response.BufferOutput = false;
    string filename = "results" + ".zip";
    Response.ContentType = "application/zip";
    Response.AddHeader("content-disposition", "filename=" + filename);

    using (ZipFile zip = new ZipFile())
    {
        zip.AddDirectory(pathhdf.Value);
        zip.Save(Response.OutputStream);
    }

    Response.Close();

   Response.Redirect("Default.aspx"); /// here come my error

前もって感謝します!

4

3 に答える 3

3

HTTP コンテンツを送信した後、リダイレクト ヘッダーやその他の HTTP ヘッダーを送信することはできません。この場合、HTTP コンテンツは .zip ファイルであるため、.zip ファイルを出力ストリームに書き込んだ後にリダイレクト ヘッダーを送信することはできません。

于 2012-06-12T19:06:42.660 に答える
2

クライアントがファイルをダウンロードするのにかかる時間がわからないため、サーバーからリダイレクトできません。サーバーが発行できるCookieの存在をポーリングするためにjavascript intervalを使用できます。これを説明する素晴らしい記事があります。Cookie が検出されると、クライアントはダウンロードが完了したことを認識し、たとえば を使用してリダイレクトできますwindow.location.href。そして、ここに同様の投稿があります。

于 2012-06-12T19:01:41.450 に答える
1

ファイルを送信した後にリダイレクトを行うことはできません。1 つの要求に対して 1 つの応答しか存在できず、リダイレクト自体が応答です。

ダウンロードとリダイレクトの両方を行いたい場合は、クライアントから 2 つのリクエストを送信する必要があります。ダウンロードを開始setTimeoutし、donload が開始されたことを確認するのに十分な時間が経過した後、Default.aspx にリダイレクトするために使用します。サーバーは一度に 1 つの要求にのみ応答するため、ダウンロードの完了後に Default.aspx ページが読み込まれます。

于 2012-06-12T19:07:23.960 に答える