2012-07-31 137 views
4

所以我一直有这个问题一段时间试图返回一个PDF内联响应。我搜索了所有通过帮助编码页面寻找答案,并找不到有效的东西。我在下面做了一个简单的例子。但核心与实际生产完全相同。这个问题并不总是会发生的,但是当它发生时它很烦人。这几乎就像是一些奇怪的计时问题或其他我没有看到的事情正在发生。 (0x80004005):找不到文件---> System.Web.HttpException(0x80004005):服务器在发送HTTP头之后无法追加头文件。服务器无法在HTTP标头发送后添加标头c#pdf inline

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

[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); 
     } 
    } 
+0

请注意,您要创建无效的内容部署值情况下,你的文件名包含空格,某些分隔符,或者非ASCII字符之前,必须清除页眉。有关详细信息,请参阅RFC 6266。 – 2016-02-19 14:43:20

回答

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); 
+0

我想我试过了。但我会再试一次,看看它是如何工作的。尽管如此,我仍然愿意接受其他建议。 – kyleb 2012-07-31 17:12:39

+0

你确定我不应该调用Response.Clear()而不是Response.ClearHeaders()吗? – kyleb 2012-07-31 17:34:44

+0

@kyleb根据MSDN的Response.Clear()擦除所有缓冲的HTML输出。但是,Clear方法只会擦除响应主体;它不会擦除响应头。而你的要求是ClearHeaders – HatSoft 2012-07-31 17:42:57

相关问题