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)
Hom*_*mer 20
我用@ roryok的评论,用引号括起文件名:
Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"")
Run Code Online (Sandbox Code Playgroud)
@a coder使用单引号的答案在IE中无法正常工作.使用单引号下载的文件仍在名称中.