1

我有一个简单的 HTTP 处理程序,它允许我们的用户检索远程存储的 PDF 文件。令人惊讶的是,当从 IE9 调用处理程序但 IE8 卡住时,此代码运行良好。您必须再次调用 url 才能正确显示 pdf。

我在网上查了一下,看看是否有进一步的反应。我最初认为响应没有正确结束,但发现以下文章:http: //blogs.msdn.com/b/aspnetue/archive/2010/05/25/response-end-response-close-and-how -customer-feedback-helps-us-improve-msdn-documentation.aspx 显然,不应使用 context.Response.Close() 或 context.Response.End()。

我正在使用的代码:

using System.Web;

namespace WebFront.Documents
{
    public class PDFDownloader : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            // Makes sure the page does not get cached
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

            // Retrieves the PDF
            byte[] PDFContent = BL.PDFGenerator.GetPDF(context.Request.QueryString["DocNumber"]);

            // Send it back to the client
            context.Response.ContentType = "application/pdf";
            context.Response.BinaryWrite(PDFContent);
            context.Response.Flush();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

有没有人遇到过同样类型的问题?

4

2 回答 2

2

在设置内容类型之前清除标题就可以了:

public void ProcessRequest(HttpContext context)
{
    // Makes sure the page does not get cached
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

    // Retrieves the PDF
    byte[] PDFContent = BL.PDFGenerator.GetPDF(context.Request.QueryString["DocNumber"]);

    // Send it back to the client
    context.Response.ClearHeaders();
    context.Response.ContentType = "application/pdf";
    context.Response.BinaryWrite(PDFContent);
    context.Response.Flush();
    context.Response.End();
}

无论如何感谢@nunespascal 让我走上正轨。

于 2012-09-05T14:42:34.810 回答
0

调用一个Response.End

这将结束您的响应,并告诉浏览器已收到所有内容。

public void ProcessRequest(HttpContext context)
        {
            // Makes sure the page does not get cached
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

            // Retrieves the PDF
            byte[] PDFContent = BL.PDFGenerator.GetPDF(context.Request.QueryString["DocNumber"]);

            // Send it back to the client
            context.Response.ContentType = "application/pdf";
            context.Response.BinaryWrite(PDFContent);
            context.Response.Flush();
            context.Response.End();
        }
于 2012-09-03T18:24:52.753 回答