我的.mvc应用程序尝试显示pdf文件。它在IE上运行正常,但在Chrome和FF上失败,给出ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
根据此处和其他网站上提出的类似问题,它似乎是一个http头问题?当我尝试直接查看标题时,我发现发送到IE和Firefox的响应有所不同,因为当IE获得1时,FF得到3个响应:
IE响应标题:
Response HTTP/1.1 200 OK
Cache-Control no-cache, no-store, must-revalidate
Pragma no-cache
Content-Type application/pdf
Expires 0
Server Microsoft-IIS/7.5
X-AspNetMvc-Version 4.0
Content-Disposition inline; filename="Invoice Number US123412.pdf#toolbar=1&view=FitV"
Content-Disposition attachment; filename="Invoice Number US123412.pdf"
X-AspNet-Version 4.0.30319
Persistent-Auth true
X-Powered-By ASP.NET
Date Wed, 19 Apr 2017 12:00:00 GMT
Content-Length 77107
许多人给出的解决方案是在文件名周围添加qutation marks(“”),我做了,但它似乎没有任何帮助。这是我的标题编辑代码:
Response.AddHeader("Content-Disposition", "inline; filename=\"" + fileName + "#toolbar=1&view=FitV\"");
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.
invoiceHelper.PDF = new InvoicePDF { FileBytes = renderedBytes, FileName = fileName };
return File(renderedBytes, "application/pdf", fileName);
似乎我可能误解了其他线程中建议的解决方案?任何帮助将不胜感激。
编辑:
我应该注意到我还尝试更改文件名以不包含空格,以便当前响应具有Invoice_Number_somenuber12121
EDIT2:
似乎当我删除我的标题代码,而是添加esponse.ClearHeaders();
时,网站会加载,但pdf会被下载而不是显示
EDIT3: 我找到了答案,所以我删除了这个问题的一些部分,这些部分毕竟不重要。
答案 0 :(得分:1)
a)只能有一个回复;也许您看到的是重定向和新请求?
b)在任何情况下,错误代码都很清楚:您正在发送多个Content-Disposition响应头字段。唐'吨。 (注意:其中一个可能是您使用的框架添加的。)
答案 1 :(得分:1)
我找到了答案。通常情况下,我发现它在堆栈溢出后发布,而不是我在此之前搜索它的整天。正如答案评论中所示:Returning a file to View/Download in ASP.NET MVC,问题在于return File(renderedBytes, "application/pdf", fileName);
。返回3个参数的那一刻,return语句将创建自己的头。就我而言,我刚刚删除了第三个参数。
提示可能有类似问题的其他人:尝试修改fileName
变量或标题中使用的其他变量,以查明问题的更精确位置。