4

因此,由于尝试返回 pdf 内联响应,我已经有一段时间遇到这个问题了。我在所有帮助编码页面中搜索了这个问题的答案,但找不到有效的东西。我在下面做了一个简化的例子。但核心与实际生产完全一样。这个问题并不总是发生,但是当它发生时它很烦人。这几乎就像是一些奇怪的时间问题或其他我没有看到的事情正在发生。

我收到此错误 System.Web.HttpException (0x80004005): File Not Found ---> System.Web.HttpException (0x80004005): Server cannot append header after HTTP headers have been sent。

有谁知道如何解决这一问题??

    [HttpGet]
    public ActionResult PDF(string id, bool inline = false)
    {
        try
        {
            MemoryStream PDFStream = GetPdfStream(id);

            PDFStream.Position = 0;

            string PDFFile = "Test.pdf";


            if (inline)
            {
                Response.AppendHeader("Content-Disposition", string.Format("inline; filename={0}", PDFFile));
                Response.BufferOutput = true;
                return File(PDFStream, MediaTypeNames.Application.Pdf);
            }
            else
                return File(PDFStream, MediaTypeNames.Application.Pdf, PDFFile);
        }
        catch (Exception Ex)
        {
            throw new HttpException(404, "File Not Found", Ex);
        }
    }
4

1 回答 1

2

您必须先清除标题,然后再添加新标题

if (inline)
{
   Response.ClearHeaders();

Response.AppendHeader("Content-Disposition", string.Format("inline; filename={0}", PDFFile));
Response.BufferOutput = true;
return File(PDFStream, MediaTypeNames.Application.Pdf);
}
else
return File(PDFStream, MediaTypeNames.Application.Pdf, PDFFile);
于 2012-07-31T17:11:21.577 回答