4

デスクトップにテスト用のファイルがあります。私はそれを次のようなビューで表示しようとしています:

@{
    ViewBag.Title = "ShowFile";
}

<h2>ShowFile</h2>

私がコントローラーに使用しているコードは次のとおりです。

   [HttpGet]
        public ActionResult ShowFile(string path)
        {
            path = @"C:\Documents and Settings\nickla\Desktop\nlamarca_06_15.pdf";

            return File(path, "application/pdf", "nlamarca_06_15.pdf");
        }

このコードを実行すると、ビューに「未定義」のアイデアが表示されます。ここで何が間違っている可能性がありますか?

4

3 に答える 3

7

パスにファイル名が指定されていないようです。

public ActionResult ShowFile(string filename)
{
    var path = @"C:\Documents and Settings\nickla\Desktop";
    var file = Path.Combine(path, filename);
    file = Path.GetFullPath(file);
    if (!file.StartsWith(path))
    {
        // someone tried to be smart and sent 
        // ?filename=..\..\creditcard.pdf as parameter
        throw new HttpException(403, "Forbidden");
    }
    return File(file, "application/pdf");
}
于 2012-07-17T14:12:24.017 に答える
2

パスにファイル名がありません。ディレクトリまでのパスのみ。完全なPDFファイル名を付けます。

public ActionResult ShowFile(string path)
{
   //not sure why you overwrote although you have a parameter to pass the path

    path = @"C:\Documents and Settings\nickla\Desktop\nlamarca_06_15.pdf";
    return File(path, "application/pdf", "nlamarca_06_15.pdf");
}

その特定のディレクトリにあるPDFファイル名がnlamarca_06_15.pdf

于 2012-07-17T14:12:44.307 に答える
0

ニック、

最初はパスの問題(ファイル名なし、パスのみ)のように見えますが、次のことを試してください。

[HttpGet]
public ActionResult ShowFile(string path)
{
    path = @"C:\Documents and Settings\nickla\Desktop\nlamarca_06_15.pdf";

    return File(path, "application/pdf", "pdf_download_name.pdf");
}

最後のパラメータは、ダウンロードしたファイルがユーザーのローカルドライブに「ヒット」するときに付けたい名前です。

[編集]質問が更新されたようですが、これまでのすべての提案が無効になっています。私が見ることができる唯一の追加は、パスパラメータを処理するルート設定がない可能性があるということです。この質問は動くターゲットになる可能性があります:)

于 2012-07-17T14:12:36.863 に答える