我正在使用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));
}
在我的开发机上,我下载了一个编程性创建的文件,其中名称为" ch"♦妖怪讯_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中是否有不同的默认设置在我缺少的机器上有所不同?
开发服务器正在运行.NET 4,并且生产服务器正在运行.NET 4.5。MVC框架包含一个启发式方法,用于确定它是否需要使用RFC 6266进行内容分配标头,尽管该启发式词在.NET 4上正确起作用。NET4在.NET 4.5上无法正常工作。最终结果是,在这种情况下您正在见证的内容。
。您最简单的行动可能是将应用程序升级到MVC 4.该版本的框架中包含一种更强大的启发式词,并且应该在.NET 4和.NET 4.5上正常工作。
。很可能原因是服务器确实看到了不同的用户代理标题字段。
说,第二个响应对于任何浏览器都不正确,您应该向Microsoft报告该问题。