ダウンロードのためにファイルをユーザーに送信した後、いくつかのメソッドを実行する必要があります。ファイルをユーザーに送信した後、応答が中止され、その後何もできなくなりますresponse.end()
。
たとえば、これは私のサンプル コードです。
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=test.pdf");
Response.ContentType = "application/pdf";
byte[] a = System.Text.Encoding.UTF8.GetBytes("test");
Response.BinaryWrite(a);
Response.End();
StartNextMethod();
Response.Redirect(URL);
したがって、この例ではStartNextMethod
andResponse.Redirect
は実行されていません。
私が試したのは、次のコードで別のハンドラー (ashx) を作成したことです。
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.AddHeader("content-disposition", "attachment; filename=test.pdf");
context.Response.ContentType = "application/pdf";
byte[] a = System.Text.Encoding.UTF8.GetBytes("test");
context.Response.BinaryWrite(a);
context.Response.End();
}
次のように呼び出します。
Download d = new Download();
d.ProcessRequest(HttpContext.Current);
StartNextMethod();
Response.Redirect(URL);
しかし、同じエラーが発生します。Response.End を CompleteRequest に置き換えようとしましたが、役に立ちません。
問題は、私が HttpContext.Current を使用していることですが、別の応答ストリームを使用する必要があると思います。あれは正しいですか?一般的に別のメソッドでそれを行うにはどうすればよいですか (ハンドラーがデータとコンテンツタイプのバイト配列を受け入れ、別の応答からダウンロードできるようにしたいとします。応答に別のページを使用したくありません。
更新
まだ良い解決策が見つかりませんでした。ユーザーがファイルをダウンロードした後にいくつかのアクションを実行したいのですが、応答\要求のために別のページを使用する必要はありません。