ASP.NET Core 中的 File()、PhysicalFile()、PhysicalFileResult() 之间有什么区别?
What is the difference between File(), PhysicalFile(), PhysicalFileResult() in ASP.NET Core?
我正在尝试使用 ASP.NET 核心 3.1 构建 Web API 端点,这将允许应用程序向我发送一个 ID,响应将包含相应的文件。
这是我的方法
[HttpGet("get")]
public IActionResult Get(Guid id)
{
FoundFileInfo file = PathFinder.Get(id);
if(file == null || !System.IO.File.Exists(file.Fullname))
{
return NotFound();
}
return File(file.Fullname, "image/jpeg");
}
使用相同的代码,我可以 return File(file.VirtualName, "image/jpeg")
、new PhysicalFileResult(filename, "image/jpeg")
或 PhysicalFile(filename, "image/jpeg")
。但是它们之间有什么区别,每个的正确用例是什么?
我的最终目标是允许消费者根据我端点的响应构建 IFileInfo 的实例。我想以某种方式为消费者提供足够的信息,例如 LastModified
、Length
、Name
、PhysicalPath
。哪种方法适合我的案例?
.NET Core 的 File
handles only virtual paths (relative within your website). The PhysicalFile
处理物理(绝对)文件路径。
PhysicalFile
只是 return 是 PhysicalFileResult
的一个门面。但是您可以使用 new PhysicalFileResult
手动 return 它。
我认为没有其他区别,选择主要取决于您如何能够获得您想要的文件的位置 return。如果您同时拥有虚拟位置和实际位置,则可以选择两者中的任意一个(File
或 PhysicalFile
)。
我正在尝试使用 ASP.NET 核心 3.1 构建 Web API 端点,这将允许应用程序向我发送一个 ID,响应将包含相应的文件。
这是我的方法
[HttpGet("get")]
public IActionResult Get(Guid id)
{
FoundFileInfo file = PathFinder.Get(id);
if(file == null || !System.IO.File.Exists(file.Fullname))
{
return NotFound();
}
return File(file.Fullname, "image/jpeg");
}
使用相同的代码,我可以 return File(file.VirtualName, "image/jpeg")
、new PhysicalFileResult(filename, "image/jpeg")
或 PhysicalFile(filename, "image/jpeg")
。但是它们之间有什么区别,每个的正确用例是什么?
我的最终目标是允许消费者根据我端点的响应构建 IFileInfo 的实例。我想以某种方式为消费者提供足够的信息,例如 LastModified
、Length
、Name
、PhysicalPath
。哪种方法适合我的案例?
.NET Core 的 File
handles only virtual paths (relative within your website). The PhysicalFile
处理物理(绝对)文件路径。
PhysicalFile
只是 return 是 PhysicalFileResult
的一个门面。但是您可以使用 new PhysicalFileResult
手动 return 它。
我认为没有其他区别,选择主要取决于您如何能够获得您想要的文件的位置 return。如果您同时拥有虚拟位置和实际位置,则可以选择两者中的任意一个(File
或 PhysicalFile
)。