2013-03-03 188 views
0

我們有一個模塊來生成和存儲PDF格式的報告。MVC3更改網址

URL,以獲取例如文件是這樣的:

https://domain.com/Document/GetDocument?documentId=00000000-0000-0000-0000-000000000000 

此URL將返回文檔名稱爲:Document_UserName_Date

但是,由於瀏覽器可以像瀏覽器一樣查看PDF文件,文件將在瀏覽器的標籤頁中以上述url查看。

因此,當用戶嘗試在他們的計算機中保存該文檔時,默認文件名(從url獲得)是:https___domain.com.pdf,而不是我們所預期的Document_UserName_Date.pdf。 所以我想,如果我可以只是改變了網址爲:

https://domain.com/Document/Document_UserName_Date.pdf 

我的問題將得到解決。

+1

您是否嘗試過在應用程序中設置內容類型爲'application/pdf'? – 2013-03-03 08:15:08

+0

用戶還喜歡用瀏覽器查看文檔。 這就是爲什麼我想首先更改網址 – NDC00629 2013-03-03 08:31:20

+0

將網址更改爲只有'.pdf'擴展名可能無法解決您的問題。你應該設置正確的標題,正如達林在下面提到的。 – 2013-03-03 08:36:40

回答

2

爲了避免文件被顯示在瀏覽器,但用戶直接提示下載它,你可以使用設置Content-Dispositionattachment

Content-Disposition: attachment; filename="Document_UserName_Date.pdf" 

這可以通過傳遞完成文件名作爲第三個參數文件過載:

public ActionResult GetDocument(Guid documentId) 
{ 
    byte[] document = GetDocument(documentId); 
    return File(document, "application/pdf", "Document_UserName_Date.pdf"); 
} 

UPDATE:

如果您希望用戶查看自己的瀏覽器中的文件在線,那麼你可以使用路由和定義以下路線:

routes.MapRoute(
    "ViewPdfRoute", 
    "document/{id}/{name}.pdf", 
    new { controller = "Home", action = "GetDocument" } 
); 

,並在你的控制器動作:

public ActionResult GetDocument(Guid id, string name) 
{ 
    byte[] pdf = GetDocument(id); 
    return File(pdf, "application/pdf"); 
} 

最後你可以請求這樣的文檔:

http://domain.com/document/0DF7E254-0576-4BC0-8B05-34FC0F5246A2/document_username_date.pdf 
+0

用戶還喜歡用瀏覽器查看文檔。這就是爲什麼我想首先更改網址 – NDC00629 2013-03-03 08:32:30

+0

好的,那麼讓我更新我的答案。 – 2013-03-03 08:33:10

+0

我認爲內容類型和內容處理標題是關鍵。儘管如此,我注意到一些較舊的瀏覽器不支持內聯查看PDF。 – 2013-03-03 08:35:29