3

私は RazorPDF を使用しています。ブラウザー タブで開くのではなく、強制的に 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();
}
4

2 に答える 2

8

オブジェクトcontent-dispositionを返す前にヘッダーを追加してみてください。PDFResult

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();
}
于 2014-01-10T17:06:36.193 に答える
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(); 

開こうとしている場合は、Api のファイルを 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";            
于 2015-12-17T12:35:11.790 に答える