使用MVC 3在浏览器选项卡中打开PDF结果

时间:2011-05-29 16:19:47

标签: asp.net-mvc-3 pdf

我正在使用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将在选项卡中打开?

3 个答案:

答案 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结尾