2011-05-29 83 views
13

我使用ASP.NET MVC 3,我有一個返回PDF文件這樣的控制器操作:打開PDF結果與MVC的瀏覽器選項卡3

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在標籤中打開?

回答

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個參數的File,則最終將使用兩個 Content-Disposition標頭。如果響應頭是這樣的,Firefox 8會說響應已損壞。

所以,最好的辦法現在就這樣做是添加內容處置手動「內聯」,然後用文件有兩個參數:

Response.AppendHeader("Content-Disposition", "inline; filename=something.pdf") 
Return File(output, "application/pdf") 
+1

一些快速測試顯示Firefox,IE6/IE7和Chrome都使用文件名。但是,IE8沒有。可能有用的知道。 – 2011-06-24 20:04:07

+0

要獲取任何類型的文件(不僅僅是PDF)的內容類型,您可以在System.Web中調用MimeMapping.GetMimeMapping(filename)。 – 2016-08-03 20:12:16

1

這可在您的瀏覽器中進行配置。您可以將設置更改爲在瀏覽器中下載/打開,或在相關應用程序中打開所有文件類型的工具 - >選項 - >應用程序部分。這與你的代碼無關。

+0

但我可以在互聯網上找到一些鏈接到PDF,以及當我點擊鏈接時,PDF將在標籤頁中打開,所以我認爲我的瀏覽器設置不是問題。 – 2011-05-29 16:37:21

+0

嘗試使用iframe並將源文件作爲pdf文件路徑