我正在尝试从保存在我的数据库中的数据显示PDF文件。它是byte[]
格式。以下代码在新的IE选项卡中成功显示PDF文件,但是,我的try catch语句中也出现异常错误。
我的代码示例:
try {
byte[] byteOutput = myObject.ContractBytes;
Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=file.pdf");
HttpContext.Current.Response.ContentType = "application/pdf";
Response.BinaryWrite(byteOutput);
Response.Flush();
Response.End();
}
catch (Exception ex)
{
RecordError(ex.Message, ex);
}
我的异常错误:
Thread was being aborted.
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.AbortCurrentThread()
at System.Web.HttpResponse.End()
at GetForm.FromDatabase() in c:\\SRC\\GetPDF.aspx.cs:line 340
at GetForm.Page_Load(Object sender, EventArgs e) in c:\\SRC\\MyPage.aspx.cs:line 106
任何帮助将不胜感激!
先谢谢你。
答案 0 :(得分:3)
我认为以下声明会产生该错误。
Response.End();
你为什么需要它?没有这个电话你试过代码吗?
答案 1 :(得分:1)
此方法仅用于与ASP兼容,即为了兼容性 基于COM的Web编程技术,位于ASP.NET之前。如果你想跳到 EndRequest事件并向客户发送响应,通常最好拨打电话 而是CompleteRequest。
为了模仿ASP中 End 方法的行为,此方法尝试引发一个 [ThreadAbortException]异常。如果此尝试成功,则调用线程将是 中止,这对您网站的性能有害。在这种情况下,通话后没有代码 执行End方法。
如果End方法无法引发[ThreadAbortException],则它会刷新响应 到客户端的字节数。它同步执行此操作,这也可能对您的网站有害 性能
在任何一种情况下(无论是否成功引发[ThreadAbortException]异常),都是 响应管道跳转到EndRequest事件。
CompleteRequest方法不会引发 一个例外,可能会执行调用CompleteRequest方法后的代码。如果 你的意图是避免执行后续代码,如果性能损失为End 是可以接受的,您可以调用End而不是CompleteRequest。