我正在使用处理程序使用以下代码在浏览器窗口中获取和显示PDF:
byte[] byt = RetrieveDocument(int.Parse(context.Request.Params["id"]), context.Request.Params["title"]);
string file = WriteDocumentFilePDF(byt);
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("content-length", byt.Length.ToString());
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=programdetails.pdf");
HttpContext.Current.Response.BinaryWrite(byt);
HttpContext.Current.Response.End();
函数WriteDocumentFilePDF成功将PDF写入临时目录。我有上面的代码在不同的应用程序中正常工作。我错过了什么吗?
答案 0 :(得分:2)
在调试这样的问题时,我发现Fiddler是一个非常宝贵的工具;很多次它让我免于简单的错误。此外,此网站http://www.c-sharpcorner.com/uploadfile/prathore/what-is-an-ashx-file-handler-or-web-handler/提供了使用GIF图像执行相同操作的示例。您的示例与他之间的区别似乎是使用Response.WriteFile()而不是使用BinaryWrite()直接写入Response。
在设置content-type之前我会执行一个Response.ClearHeaders(),我会删除对Response.End()的调用。
答案 1 :(得分:0)
如果您先将byte[]
传递给memorystream
,会不会有所作为?像
byte[] byt = RetrieveDocument(int.Parse(context.Request.Params["id"]), context.Request.Params["title"]);
string file = WriteDocumentFilePDF(byt);
MemoryStream ms = new MemoryStream(byt);
然后添加标题
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=programdetails.pdf");
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
HttpContext.Current.Response.End();