我有一个提供文件的操作:
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没有“看到”该文件?
答案 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