0

レポートを生成して PDF 形式で保存するためのモジュールがあります。

ドキュメントを取得するための URL は、たとえば次のようになります。

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

この URL は、次の名前のドキュメントを返します: Document_UserName_Date.

ただし、Chrome のように PDF ファイルを閲覧できるブラウザもあるため、上記 URL のブラウザのタブでドキュメントを閲覧することになります。

そのため、ユーザーがそのドキュメントを自分のコンピューターに保存しようとすると、既定のファイル名 (URL から取得される) は、予想とは異なりますhttps___domain.com.pdfDocument_UserName_Date.pdfだから私は、URLを次のように変更できればと考えています:

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

私の問題は解決されます。

4

1 に答える 1

2

Content-Dispositionドキュメントがブラウザーに表示されないようにするために、ユーザーが直接ダウンロードするように求められる場合は、ヘッダーをattachment次のように設定できます。

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

これは、ファイル オーバーロードの 3 番目の引数としてファイル名を渡すだけで実行できます。

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

アップデート:

ユーザーがブラウザーでドキュメントをインラインで表示できるようにする場合は、ルーティングを使用して次のルートを定義できます。

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
于 2013-03-03T08:28:33.957 に答える