我正在构建一个小动作来获取加密的PDF文件路径,解密它,并将生成的PDF传送到浏览器。
我的代码在Chrome和Firefox中100%有效,但在IE9中只有50%的时间可用。
当我按照IE9中的链接进行操作时,看起来它在浏览器窗口中打开了Adobe Reader插件,但在我点击刷新之前没有显示任何文件。
这是我的代码:
[CheckSubscriber]
public ActionResult file(string path)
{
string mappedPath = Server.MapPath(
EncryptDecrypt.Decrypt(path,
EncString));
return base.File(mappedPath, "application/pdf");
}
如何在IE9中始终如一地使用它?
我只是在这里大声思考,但也许我使用了错误的mime-type?
答案 0 :(得分:4)
您应该明确设置
Content-Disposition: inline; filename="foo.pdf"
content-disposition 是从服务器返回响应时的关键响应标头。如果与MIME类型一起指定,所有浏览器将100%正确地检测文件。
您可以使用Fiddler确保响应标头按顺序排列。
修改
您无法使用“ActionResult”返回类型执行此操作。
您需要使用“FilePathResult”或“FileStreamResult”,这两者都可以在System.Web.MVC名称空间中找到。
或者,您可以创建Custom Action Return Type并将其用于此操作。 我提供的文章一步一步地提供了关于如何执行此操作的代码。
答案 1 :(得分:0)
我会使用Fiddler来查看浏览器发送/接收的请求/响应之间的区别,看看是否可以从那里发现它。
答案 2 :(得分:0)
以下是我如何返回Excel文件(pdf应该相同):
public FileResult DownloadErrors(string filename)
{
var file = System.IO.File.ReadAllText(filename);
return File(new System.Text.UTF8Encoding().GetBytes(file), "application/ms-excel", "Errors.csv");
}
请务必使用FileResult而不是ActionResult。