从asp.net核心高效发送文件

时间:2017-07-07 21:09:45

标签: 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发出额外的跳跃。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

如果您的意思是将文件流式传输到客户端,则可以使用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文档。