Chrome,pdf显示,从服务器收到的重复标头

Bla*_*irM 59 iis-6 google-chrome asp.net-mvc-3

我在网站上有一个部分,我在灯箱里面显示一个pdf.最近的Chrome升级打破了这个显示:

错误349(net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):收到多个Content-Disposition标头.这是不允许的,以防止HTTP响应分裂攻击.

这仍然可以在IE中正常工作.

我在IIS6上使用ASP.NET MVC3

我用来生成文件的代码如下.

如果我删除内联语句,则文件会下载,但会破坏灯箱功能.

问题代码

public FileResult PrintServices()
{
    //... unrelated code removed
    MemoryStream memoryStream = new MemoryStream();
    pdfRenderer.PdfDocument.Save(memoryStream);
    string filename = "ServicesSummary.pdf";

    Response.AppendHeader("Content-Disposition", "inline;");

    return File(memoryStream.ToArray(), "application/pdf", filename);
}
Run Code Online (Sandbox Code Playgroud)

修复

去掉

Response.AppendHeader("Content-Disposition", "inline;");
Run Code Online (Sandbox Code Playgroud)

然后改变

return File(memoryStream.ToArray(), "application/pdf", filename);
Run Code Online (Sandbox Code Playgroud)

return File(memoryStream.ToArray(), "application/pdf");
Run Code Online (Sandbox Code Playgroud)

2GD*_*ave 71

如果您不需要指定文件名,上面的解决方案就可以了,但我们希望保留为用户指定的默认文件名.

我们的解决方案最终成为文件名本身,因为它包含一些逗号.我用""替换了逗号,现在该文件按照预期在Chrome中提供了文档.

FileName = FileName.Replace(",", "")

Response.ContentType = "application/pdf"
Response.AddHeader("content-disposition", "attachment; filename=" & FileName)    
Response.BinaryWrite(myPDF)
Run Code Online (Sandbox Code Playgroud)

  • 同样的问题在这里,但只能通过将文件名放在引号中来修复:`Response.AddHeader("content-disposition","attachment; filename = \""+ FileName +"\"") (37认同)
  • 您还可以在文件名周围添加引号. (3认同)
  • @Nik你应该用引号解决方案发布一个答案,因为它与这个完全不同,效果很好.我会赞成这个答案. (2认同)

Hom*_*mer 20

我用@ roryok的评论,用引号括起文件名:

Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"")
Run Code Online (Sandbox Code Playgroud)

@a coder使用单引号的答案在IE中无法正常工作.使用单引号下载的文件仍在名称中.