在将文件发送给用户进行下载后,我需要运行几种方法。发生的情况是,在我向用户发送文件后,响应被中止,之后我无法再做任何事情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
并Response.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);
但同样的错误发生。我已经尝试用 CompleteRequest 替换 Response.End 但它没有帮助。
我想问题是我正在使用 HttpContext.Current 但应该使用单独的响应流。那是对的吗?我通常如何在单独的方法中执行此操作(假设我希望我的处理程序接受数据和内容类型的字节数组并且可以从单独的响应中下载。我真的不想使用单独的页面进行响应。
更新
我仍然没有找到一个好的解决方案。我想在用户下载文件后执行一些操作,但不使用单独的页面进行响应\请求。