【问题标题】:production vs dev server content-disposition filename encoding生产与开发服务器内容处置文件名编码
【发布时间】:2012-10-18 12:54:55
【问题描述】:

我正在使用 asp.net mvc3,在同一个浏览器(Chrome 22)中下载文件。这是控制器代码:

[HttpPost]
public ActionResult Uploadfile(HttpPostedFileBase file)//HttpPostedFileBase file, string excelSumInfoId)
{
    ...
    return File(
        result.Output,
        "application/vnd.ms-excel",
        String.Format("{0}_{1:yyyy.MM.dd-HH.mm.ss}.xls", "Суммирование", DateTime.Now));
}

在我的开发机器上,我下载了一个以正确名称“Суммирование_2012.10.18-13.36.06.xls”以编程方式创建的文件。

回应:

Content-Disposition:attachment; filename*=UTF-8''%D0%A1%D1%83%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_2012.10.18-13.36.06.xls
Content-Length:203776
Content-Type:application/vnd.ms-excel
Date:Thu, 18 Oct 2012 09:36:06 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0

我从生产服务器下载了一个带有控制器操作名称+正确扩展名“Uploadfile.xls”的文件,这是错误的。

回应:

Content-Disposition:attachment; filename="=?utf-8?B?0KHRg9C80LzQuNGA0L7QstCw0L3QuNC1XzIwMTIuMTAuMTgtMTMuMzYu?=%0d%0a =?utf-8?B?NTUueGxz?="
Content-Length:203776
Content-Type:application/vnd.ms-excel
Date:Thu, 18 Oct 2012 09:36:55 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET

两台机器上的 Web.config 文件相同。

为什么同一个浏览器的文件名编码不同? web.config 中是否有任何类型的默认设置在我缺少的机器上有所不同?

【问题讨论】:

    标签: asp.net-mvc-3 google-chrome content-disposition


    【解决方案1】:

    开发服务器运行 .NET 4,生产服务器运行 .NET 4.5。 MVC 框架包含一个启发式方法,用于确定是否需要将 RFC 6266 用于 Content-Disposition 标头,虽然此启发式方法在 .NET 4 上可以正常工作,但在 .NET 4.5 上却不能正常工作。最终结果是 Content-Disposition 标头被破坏,正如您在本例中所看到的那样。

    您最简单的做法可能是将应用程序升级到 MVC 4。该版本的框架包含一个不同的启发式算法,它更加健壮并且应该在 .NET 4 和 .NET 4.5 上都能正常工作。

    【讨论】:

    • 您是如何发现 prod 在 .net 4.5 之上运行的? (我检查了注册表,你是对的;))
    • 几个月前首次报告此错误时,我负责分析此错误。所以这有帮助,我想。 :)
    • 刚刚在本地安装了 MVC 3 和 .NET 4.5 时遇到了这个问题。很高兴知道。谢谢李维!
    • 刚刚也遇到了这个问题。 MVC3,仅使用一定长度的西里尔文文件名复制。花了一段时间才弄清楚如何正确地用谷歌搜索它!谢谢,列维。
    【解决方案2】:

    最可能的原因似乎是服务器确实看到了不同的 User-Agent 标头字段。

    话虽如此,第二个响应对于任何浏览器都不正确,您应该将该问题报告给 Microsoft。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多