在我的控制器中,这是我的代码
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找不到异常?
在我看来这就是我所拥有的
<td>
@Html.ActionLink("Download", "Download", new { id = item.FileName})
</td
答案 0 :(得分:0)
App_Data
用于MS SQL Server访问的数据库文件,可能是您的应用程序自己的数据文件(如Lucene索引)。
IIS(和ASP.NET)配置为阻止对该目录的任何客户端请求。
解决方案就是将文件移动到另一个目录。只需在您网站的根目录中创建一个新文件夹(例如“CsvFiles”)并链接到该文件夹。
那就是说,为什么不向CSV文件提供HTTP 301重定向(甚至直接链接)而不是通过您的应用程序提供它们?
更新:此答案不正确,因为通过MVC文件响应提供文件内容,用户的浏览器不会实际访问App_Data
目录。
答案 1 :(得分:0)
您的action
方法的参数名称为文件。但是你的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);