Эффективная отправка файлов из ядра asp.net

Я заинтересован в портировании некоторого кода на ASP.NET Core и хотел бы узнать наиболее эффективный способ отправки файлов, то есть "загрузки" файлов, из веб-службы ASP.NET Core.

С моим старым кодом ASP.NET я использовал FileStream:

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

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

Однако я пытался найти.NET-эквивалент функции sendfile() во FreeBSD и нашел HttpResponse.TransmitFile. Я полагаю, это будет быстрее?

Я также обеспокоен тем, что файл должен сделать дополнительный переход из Kestrel в IIS, прежде чем ударить пользователя. Любой совет?

1 ответ

Если вы имеете в виду потоковую передачу файла клиенту, вы можете использовать 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.

Другие вопросы по тегам