Firefox和Chrome获得与IE不同的标题

时间:2017-04-19 11:40:33

标签: asp.net asp.net-mvc http firefox http-headers

我的.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: 我找到了答案,所以我删除了这个问题的一些部分,这些部分毕竟不重要。

2 个答案:

答案 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变量或标题中使用的其他变量,以查明问题的更精确位置。