在C#中从byte []显示PDF

时间:2013-11-22 19:21:21

标签: c# visual-studio-2010 pdf byte

我正在尝试从保存在我的数据库中的数据显示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

任何帮助将不胜感激!

先谢谢你。

2 个答案:

答案 0 :(得分:3)

我认为以下声明会产生该错误。

Response.End();

你为什么需要它?没有这个电话你试过代码吗?

答案 1 :(得分:1)

你有read the documentation吗?

  

此方法仅用于与ASP兼容,即为了兼容性   基于COM的Web编程技术,位于ASP.NET之前。如果你想跳到   EndRequest事件并向客户发送响应,通常最好拨打电话   而是CompleteRequest

     

为了模仿ASP中 End 方法的行为,此方法尝试引发一个   [ThreadAbortException]异常。如果此尝试成功,则调用线程将是   中止,这对您网站的性能有害。在这种情况下,通话后没有代码   执行End方法。

     

如果End方法无法引发[ThreadAbortException],则它会刷新响应   到客户端的字节数。它同步执行此操作,这也可能对您的网站有害   性能

     

在任何一种情况下(无论是否成功引发[ThreadAbortException]异常),都是   响应管道跳转到EndRequest事件。

     

CompleteRequest方法不会引发   一个例外,可能会执行调用CompleteRequest方法后的代码。如果   你的意图是避免执行后续代码,如果性能损失为End   是可以接受的,您可以调用End而不是CompleteRequest