【问题标题】:Firefox and chrome get different header than IEFirefox 和 chrome 的标题与 IE 不同
【发布时间】:2017-04-19 11:40:32
【问题描述】:

我的 .mvc 应用程序试图显示一个 pdf 文件。它在IE上正常工作,但在Chrome和FF上失败,给ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION根据here和其他网站上的类似问题,这似乎是一个http头问题?当我尝试直接查看标头时,我发现发送到 IE 和 Firefox 的响应不同,因为 FF 得到 3 个响应,而 IE 得到 1 个:

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

许多人给出的解决方案是在文件名周围添加引号(“”),我这样做了,但这似乎没有任何帮助。这是我的标题编辑代码:

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

编辑2: 似乎当我删除我的标头代码,而是添加esponse.ClearHeaders(); 时,网站加载但 pdf 被下载而不是显示

编辑3: 我已经找到了答案,所以我删除了这个问题中一些并不重要的部分。

【问题讨论】:

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


    【解决方案1】:

    a) 只能有一个响应;也许您看到的是重定向和新请求?

    b) 在任何情况下,错误代码都很清楚:您正在发送多个 Content-Disposition 响应头字段。不。 (注意:其中一个可能是您使用的框架添加的)。

    【讨论】:

    • 我实际上稍微向前移动并在其中一个 cmets 中找到了一个可能的原因来响应此线程下的响应:stackoverflow.com/questions/5826649/…,作者 Faust May,显然使用 3 个参数 return File 使它添加了一个新标题。刚才我发现这个返回是导致问题的原因,然后我发现了这个提示
    【解决方案2】:

    我找到了答案。通常情况下,我在发布堆栈溢出后发现它,而不是在那之前我整天搜索它。正如此处对答案的评论中所见:Returning a file to View/Download in ASP.NET MVC ,问题出在return File(renderedBytes, "application/pdf", fileName); 上。当您返回 3 个参数时,return 语句将创建自己的标头。就我而言,我只是删除了第三个参数。

    提示可能有类似问题的其他人:尝试修改 fileName 变量或标题中使用的其他变量,以查明问题的更精确位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      相关资源
      最近更新 更多