2014-01-10 208 views
3

我正在使用RazorPDF,我想強制下載PDF,而不是在瀏覽器選項卡中打開。我該怎麼做呢?由於PDF下載,而不是在瀏覽器中打開

public ActionResult Index() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Index(string Id) 
{ 
    return RedirectToAction("Pdf"); 
} 

public PdfResult Pdf() 
{ 
    // With no Model and default view name. Pdf is always the default view name 
    return new PdfResult(); 
} 
+0

您需要在響應標頭中設置「content-disposition」 - http://stackoverflow.com/questions/1012437/uses-of-content-disposition-in-an-http-response-header。 – adrianbanks

+0

我如何在上面的代碼中做到這一點? –

+0

我還沒有使用過RazorPDF,但是您可能會在返回PDF文件之前添加鏈接答案中的代碼。 – adrianbanks

回答

7

嘗試返回PDFResult對象之前添加content-disposition頭。

public PdfResult Pdf() 
{ 
    Response.AddHeader("content-disposition", "attachment; filename=YourSanitazedFileName.pdf"); 

    // With no Model and default view name. Pdf is always the default view name 
    return new PdfResult(); 
} 
+0

IronGeek,我沒有任何.pdf文件可以返回。所以我不確定你的代碼是否適用於我的情況。謝謝 –

+0

@ dotnet-practitioner您不必,它可以是任何名稱。你甚至可以使用它的隨機名稱。瀏覽器將使用該名稱作爲文件名在下載文件對話框中下載。 – IronGeek

+0

謝謝IronGeek。它工作完美...你搖滾! –

0

你應該看看「Content-Disposition」標題;例如,將「Content-Disposition」設置爲「attachment; filename = FileName.pdf」將提示用戶(通常)使用「另存爲:FileName.pdf」對話框,而不是打開它。但是,這需要來自執行下載的請求,所以在重定向期間您不能這樣做。但是,ASP.NET爲此提供了Response.TransmitFile。例如(假設你不使用MVC,它有其他可取的方案):

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf"); 
Response.TransmitFile(filePath); 
Response.End(); 

如果你是嘗試打開,然後在阿比將文件轉換流方式BytesArray,然後填寫內容

  HttpResponseMessage result = null; 
      result = Request.CreateResponse(HttpStatusCode.OK); 
      FileStream stream = File.OpenRead(path); 
      byte[] fileBytes = new byte[stream.Length]; 
      stream.Read(fileBytes, 0, fileBytes.Length); 
      stream.Close();   
      result.Content = new ByteArrayContent(fileBytes); 
      result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment"); 
      result.Content.Headers.ContentDisposition.FileName = "FileName.pdf";    
相關問題