c# - 从 asp.net core 高效地发送文件

标签 c# asp.net asp.net-web-api asp.net-core response.transmitfile

我对将一些代码移植到 ASP.NET Core 很感兴趣,并且想知道从 ASP.NET Core Web 服务发送文件(也称为“下载”文件)的最有效方式。

在我的旧 ASP.NET 代码中,我使用的是 FileStream:

var content = new FileStream(
    myLocation,
    FileMode.Open, FileAccess.Read, FileShare.Read);

var result = new HttpResponseMessage(HttpStatusCode.OK)
{
    Content = new StreamContent(content)
};

但是,我试图找到与 FreeBSD 的 sendfile() 等效的 .NET 并找到了 HttpResponse.TransmitFile 。我认为这会更快?

我还担心该文件在命中用户之前必须从 Kestrel 跳出到 IIS。有什么建议吗?

最佳答案

如果您的意思是将文件流式传输到客户端,您可以使用 FileResult 作为返回类型。

public FileResult DownloadFile(string id) {
    var content = new FileStream(myLocation,FileMode.Open, FileAccess.Read, FileShare.Read);
    var response = File(content, "application/octet-stream");//FileStreamResult
    return response;
} 

FileResult 是所有文件相关操作结果的父级,例如 FileContentResult、FileStreamResult、VirtualFileResult、PhysicalFileResult。 请参阅 ASP.NET Core ActionResult 文档。

关于c# - 从 asp.net core 高效地发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44979668/

相关文章:

c# - C# 中的 Int64 不等于 long 吗?

c# - System.Reflection.Assembly 的空引用异常

javascript - Asp-net web api 输出带有字母 T 的日期时间

c# - 如何从 UseStatusCodePagesWithReExecute 中排除某些路由?

c# - Web API 中的请求依赖解析

c# - 嵌套的 XML 序列化 C#

c# - 使用 'var'会影响性能吗?

asp.net - 有很多复选框的表单,如何获取 id 列表?

asp.net - WebActivatorEx.ActivationManager 类型错误引发异常...参数计数不匹配

c# - 断点未命中 ItemDataBound 函数