使用FileStreamResult找不到下载文件时返回消息

时间:2015-04-03 00:16:39

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-5.1 asp.net-mvc-5.2

我有一个目录“下载”,我有我们的客户可以下载的静态文件。我使用以下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错误页面的页面。

1 个答案:

答案 0 :(得分:4)

我建议让你的返回类型基于ActionResult而不是FileStreamResult然后你可以灵活地处理它。

  1. 您可以重定向到自定义方法,然后从中提供正确的消息/视图。
  2. 通过异常和配置文件句柄404与您的自定义错误文件。 (抛出新的HttpException(404," Not found");)
  3. 希望这可以解决您的问题。