1

私のコントローラーでは、これは私が持っているコードです

   public FileResult Download(string file)
    {



        var vFullFileName = HostingEnvironment.MapPath("~/App_Data/Files/");

        var files = uploadedfileRepository.AllIncluding();
        string filename = (from f in files

                           select f.FileName).First();


        return File(Path.Combine(vFullFileName, filename), "application/csv", filename);
    }

ブレークポイントとファイル ポイントを正しいディレクトリに配置しましたが、それでも File not found 例外が発生するのはなぜですか?

そして私の見解では、これは私が持っているものです

 <td>
            @Html.ActionLink("Download", "Download", new { id = item.FileName})
        </td
4

2 に答える 2

0

App_DataMS SQL Server によってアクセスされるデータベース ファイルと、場合によってはアプリケーション独自のデータ ファイル (Lucene インデックスなど) 用です。

IIS (および ASP.NET) は、そのディレクトリへのクライアント要求をブロックするように構成されています。

解決策は、ファイルを別のディレクトリに移動することです。サイトのルート ("CsvFiles" など) に新しいフォルダーを作成し、それにリンクするだけです。

とはいえ、CSV ファイルをアプリケーション経由で提供するのではなく、HTTP 301 リダイレクト (または直接リンク) を提供してみませんか?

更新: MVC ファイル応答を介してファイルの内容を提供することにより、ユーザーのブラウザーが実際にディレクトリにアクセスしないため、この回答は正しくありませんApp_Data

于 2012-09-06T20:29:53.460 に答える
0

メソッドにはfileactionという名前のパラメーターがあります。しかし、HTML にはidというパラメーター/クエリ文字列があり 、od ファイルの代わりに、ビュー コードを次のように変更します。

@Html.ActionLink("Download", "Download", new { file= item.FileName})

また、パスを取得するには、これを試してください

string fullFilePath=Path.Combine(Server.MapPath("~/App_Data"),filename)
return File(fullFilePath,"application/csv",filename);
于 2012-09-06T20:37:53.907 に答える