找不到文件结果的文件

时间:2016-11-20 08:58:21

标签: c# asp.net-core

我有一个提供文件的操作:

public ActionResult() GetFile
{
     return this.File("C:\\test.txt", "text/plain",
                "test.txt");
}

但是动作会导致错误:

  

FileNotFoundException:找不到文件:C:\ test.txt   Microsoft.AspNetCore.Mvc.Internal.VirtualFileResultExecutor + d__4.MoveNext()

我确定文件是exstis - 它可以通过“运行”窗口(Win + R)打开。 为什么Asp.net核心mvc没有“看到”该文件?

1 个答案:

答案 0 :(得分:6)

接受File()的{​​{1}}重载定义为:

string

如您所见,参数的名称为public virtual VirtualFileResult File(string virtualPath, string contentType) 。这意味着您必须将虚拟路径传递给文件,而不是物理路径。

(虚拟路径表示相对于当前应用程序的路径。例如:virtualPath,其中~/Content/test.txt表示应用程序根目录。)

如果您坚持提供位于应用程序根目录之上的物理文件,则可以事先读取它并将实际字节传递给相应的~重载:

File()

<强>更新

实际上,基本控制器 提供var physicalFilePath = "C:\\test.txt"; var fileBytes = System.IO.File.ReadAllBytes(physicalFilePath); return this.File(fileBytes, "text/plain", "test.txt"); 方法,可用于使用物理路径提供文件。在你的情况下:

PhysicalFile()

您还应该记住(通常)运行应用程序的过程,没有足够的权限从return PhysicalFile("C:\\test.txt", "text/plain", "test.txt"); 的根目录中读取。

请参阅Source