第一次在这里提问,如果我做错了,请告诉我......
我的C# MVC5应用程序允许用户下载PDF文件。它工作得很好,除了在我的Android手机上。我正在使用Chrome,并让操作系统处理PDF。看起来它正在使用Google Drive应用程序内置的PDF查看器。
当我使用直接链接到该文件时,它正常工作,但是当我通过控制器操作下载它时,会出现“文件格式无效”的错误。我将其简化为此问题的测试案例。
所以这是我的操作方法:
public ActionResult IndirectTestFile()
{
string filename = "document.pdf";
var disposition = new System.Net.Mime.ContentDisposition("inline") { FileName = filename };
Response.AppendHeader("Content-Disposition", disposition.ToString());
string serverFilename = Server.MapPath("~/files/direct/" + filename);
return File(serverFilename, "application/pdf");
}
并且我的HTML代码是:
//This fails:
<a href="/report/indirectTestFile">Indirect link to file</a>
//This works:
<a href="/Files/direct/Document.pdf">Direct link to file</a>
我使用Windows(桌面)Chrome获取这些请求的标头。
以下是直接链接的响应标头:
HTTP/1.1 200 OK
Content-Type: application/pdf
Last-Modified: Thu, 07 Jul 2016 11:46:47 GMT
Accept-Ranges: bytes
ETag: "b8a3dd3d45d8d11:0"
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Thu, 07 Jul 2016 12:33:05 GMT
Content-Length: 51793
并且链接到MVC操作的响应头:
HTTP/1.1 200 OK
Cache-Control: private, s-maxage=0
Content-Type: application/pdf
Server: Microsoft-IIS/10.0
Content-Disposition: inline; filename=document.pdf
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 07 Jul 2016 12:34:09 GMT
Content-Length: 51793
我没有看到任何显著的差异,但一个可靠地工作,另一个可靠地失败。
这不是下载损坏了。如果我在Windows上下载“坏”的PDF文件并将其复制到Android手机上,同样的查看器可以正常显示它!
有人以前遇到过这种情况吗?谢谢任何帮助。