剃刀 MVC 控制器下载文件

本文关键字:文件 下载 控制器 MVC 剃刀 | 更新日期: 2023-09-27 18:34:11

我有一个类似于以下代码的控制器,我想知道如何使用 Razor 调用它因为@Url.Action("GetFileFromDisk")没有按预期工作,所以它只会崩溃。如果可能的话,你能在这里指出我的错误吗?或者也许建议一种更好的方法来强制单击以下载文件

public FilePathResult GetFileFromDisk()
{
  string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
  string fileName = "test.txt";
  return File(path + fileName, "text/plain", "test.txt");
}

提前谢谢。

更新

我收到的错误消息是

http://mypage/Support/GetFileFromDisk 的网页可能暂时关闭,或者可能已永久移动到新的网址。 错误代码:ERR_INVALID_RESPONSE'

剃刀 MVC 控制器下载文件

要强制下载文件,您可能应该使用 octet-stream .由客户端(浏览器)决定是否下载或显示内容,但无论如何,通常会下载octet-stream内容。还应使用 Path.Combine,而不是手动将文件名与路径连接起来。

public FilePathResult GetFileFromDisk()
{
  string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "uploads/");
  string fileName = "test.txt";
  return File(Path.Combine(path,fileName), "application/octet-stream", "test.txt");
}

编辑,现在您已经给出了实际错误:

此"可能暂时关闭"消息表示在应用程序中找不到与给定 URL 匹配的路由。您的网址可能有问题。

技巧:

  1. 检查您是否可以使用相同的 URL 模式访问与"GetFileFromDisk"同级的操作。
  2. 查看您的路线。
  3. 安装 Glimpse,以便调试路由。
我认为如果你

返回File而不是FilePathResult 你应该使用FileResult

或使用 FilePathResult 作为返回

public FilePathResult GetFileFromDisk() { string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/"; string fileName = "test.txt"; return new FilePathResult(Path.Combine(path, fileName), System.Net.Mime.MediaTypeNames.Application.Octet); }