我有一个目录“下载”,我有我们的客户可以下载的静态文件。我使用以下ActionLink来调用文件:
@Html.ActionLink("Download Example", "Download", new { area = "", controller = "Common", fileName = "SomeFile.xlsx" })
调用“Common”控制器并使用以下代码返回文件:
public FileStreamResult Download(string fileName)
{
var filePath = Server.MapPath("~/Download/" + fileName);
var ext = Path.GetExtension(fileName);
switch (ext)
{
case ".xlsx":
return new FileStreamResult(new FileStream(filePath, FileMode.Open),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
case ".xls":
return
new FileStreamResult(
new FileStream(Server.MapPath("~/Download/" + fileName), FileMode.Open),
"application/vnd.ms-excel");
case ".pdf":
return
new FileStreamResult(
new FileStream(Server.MapPath("~/Download/" + fileName), FileMode.Open),
"application/pdf");
}
return null;
}
}
我的问题是,由于我没有返回视图,如何向视图返回消息以显示文件是否不存在(404)?
我已经弄清楚了这一点:
if (!System.IO.File.Exists(filePath))
{
}
但我不知道要返回什么以避免404重定向。我想在页面中返回“找不到文件”或类似内容的消息,而不是重定向到404错误页面的页面。
答案 0 :(得分:4)
我建议让你的返回类型基于ActionResult而不是FileStreamResult然后你可以灵活地处理它。
希望这可以解决您的问题。