我正在使用ASP.NET MVC 3.我有一个控制器操作,它返回一个PDF文件:
Public Class ReportController
...
Function Generate(id As Integer) As ActionResult
...
Return File(output, "application/pdf", "something.pdf")
' "output" is a memory stream
End Function
代码有效,但Firefox不会在选项卡中显示结果,结果可以使用Adobe Reader下载或打开。
我知道 Firefox可以在标签中显示PDF,因为我可以谷歌一些PDF,点击链接,PDF将在标签中打开。
如何设置操作以便PDF将在选项卡中打开?
答案 0 :(得分:21)
我从related links on the right获得答案:
Response.AppendHeader("Content-Disposition", "inline")
Return File(output, "application/pdf")
PDF会在选项卡中打开,但文件名提示会丢失,即使我这样做:
Response.AppendHeader("Content-Disposition", "inline; filename=something.pdf")
Return File(output, "application/pdf", "something.pdf")
所以最后我没有费心去提供文件名提示。
修改
ASP.NET MVC 3的包含3个参数的文件:
Return File(output, "application/pdf", "something.pdf")
会将Content-Disposition: attachment; filename="something.pdf"
添加到响应标头中,即使响应标头中已存在Content-Disposition。
因此,如果您手动将内容处置添加到标题中,然后使用带有3个参数的文件,则最终会得到两个内容处置标头。如果响应头像这样,Firefox 8会说响应已损坏。
现在最好的方法是手动为'inline'添加Content-Disposition,然后使用带有2个参数的File:
Response.AppendHeader("Content-Disposition", "inline; filename=something.pdf")
Return File(output, "application/pdf")
答案 1 :(得分:1)
这可以在浏览器中配置。您可以在浏览器中更改要下载/打开的设置,也可以在相关应用程序的工具 - >选项 - >应用程序部分中打开所有文件类型。这与你的代码无关。
答案 2 :(得分:0)
尝试直接链接到PDF ....如果它在标签中打开,请尝试将路线更改为以.pdf结尾