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_Data适用于 MS SQL Server 访问的数据库文件,也可能是您的应用程序自己的数据文件(如 Lucene 索引)。

IIS(和 ASP.NET)被配置为阻止任何客户端对该目录的请求。

解决方案是将文件移动到另一个目录。只需在您网站的根目录中创建一个新文件夹(例如“CsvFiles”)并链接到该文件夹​​。

也就是说,您为什么不向 CSV 文件提供 HTTP 301 重定向(甚至是直接链接),而不是通过您的应用程序提供它们?

更新:这个答案是不正确的,因为通过 MVC 文件响应提供文件内容,用户的浏览器不会真正访问App_Data目录。

于 2012-09-06T20:29:53.460 回答
0

您的action方法有一个名为file的参数。但是您的 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 回答