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

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

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

这仍然在IE中正常工作。

我在IIS6上使用ASP.NET MVC3

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

如果我删除内联语句,然后下载文件,但打破了灯箱的function。

问题代码

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); } 

修正

去掉

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

然后改变

 return File(memoryStream.ToArray(), "application/pdf", filename); 

 return File(memoryStream.ToArray(), "application/pdf"); 

如果你不需要指定文件名,上面的解决scheme是好的,但我们希望保持为用户指定的文件名默认。

我们的解决scheme最终成为文件名本身,因为它包含一些逗号。 我用逗号replace了逗号,现在文件在Chrome中按照预期提供了文档。

 FileName = FileName.Replace(",", "") Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "attachment; filename=" & FileName) Response.BinaryWrite(myPDF) 

我用@ roryok的评论,包装文件名引号:

 Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"") 

@编码器的使用单引号的回答在IE中没有按预期的那样工作。 用单引号下载的文件仍然在名称中。

今天有这个问题。 Per roryok和其他人,解决scheme是把文件名放在引号中。

以前,Chrome浏览器FAIL:

 header("Content-Disposition: attachment; filename=$file"); 

目前,Chrome确定:

 header("Content-Disposition: attachment; filename='$file'"); 

注意$file周围的引号。

解决这个任何文件types与自定义文件名删除(或类似的标题)

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

并添加

 string fileName = "myfile.xlsx" return File(fileStream, System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(filePath)), fileName); 

您也可以在第一个参数中使用文件path而不是stream

我的问题是由于双引号如下所示:

 var encoding = System.Text.Encoding.UTF8; *Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**\"{0}\"**", HttpUtility.UrlEncode(file, encoding)));* 

改变上面这个工作!

 *Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**{0}**", HttpUtility.UrlEncode(file, encoding)));*