2

在我的应用程序中,我需要下载一个文件,所以我正在使用这段代码:

 Response.ContentType = "application/octet-stream";                    
 Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls");
 Response.TransmitFile(strFilePath);
 Response.End();

Response.End()我得到一个错误ThreadAbortException

为了避免这个错误,我尝试使用 httpApplication.CompleteRequest(),但我也无法使用它。

httpApplication.CompleteRequest() 的代码如下,

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls");
Response.TransmitFile(strFilePath);
HttpApplication.CompleteRequest();

我在使用 HttpApplication.CompleteRequest() 时收到此错误

An object reference is required for the non-static field, method, or property 'System.Web.HttpApplication.CompleteRequest()'

我希望我能够澄清我的疑问......帮助我......

4

5 回答 5

6

Response.End()预计会抛出一个ThreadAbortException.
这是设计使然,因此不处理页面响应的其余部分。

得到这个异常是完全可以的,它将确保页面不会被进一步处理。

参考:HttpResponse.End

CompleteRequest 方法不会引发异常,调用 CompleteRequest 方法之后的代码可能会被执行。如果您的意图是避免执行后续代码,并且 End 的性能损失是可以接受的,您可以调用 End 而不是 CompleteRequest。

于 2013-06-24T08:18:28.973 回答
3

试试这个代码:

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls");
Response.TransmitFile(strFilePath);
HttpContext.Current.ApplicationInstance.CompleteRequest();
于 2013-06-24T07:51:44.413 回答
0

发生错误是因为您使用的是 ASP 更新面板或任何使用 JavaScript 的控件。尝试在没有 JavaScript 或 ScriptManager 或脚本的情况下使用来自 ASP 或 HTML 的本机控件。

于 2017-08-24T16:46:46.573 回答
0

我遇到过这个问题,并用下面的代码解决了

ScriptManager sm = ScriptManager.GetCurrent(this.Page);
              sm.RegisterPostBackControl(this.grid);
于 2018-02-08T06:02:14.110 回答
-1

只需评论这一行,你就可以开始了:

//Response.End();

它对我有用:)

于 2017-03-25T11:58:19.600 回答