Не удается получить доступ к закрытому потоку при возврате FileStreamResult из C# .NetCore API - PullRequest
0 голосов
/ 22 апреля 2020

C#. Net -Core 3.1

В моем C# API я возвращаю pdf-файл в FileStreamResult, отлично работает.

Обычно я оборачиваю потоки при использовании Однако этот код не работает с Cannot access a closed Stream.

using (MemoryStream stream = new MemoryStream(byteArray))
{
    fileStreamResult = new FileStreamResult(stream, "application/pdf");
}
return (ActionResult)fileStreamResult;

Поэтому мне нужно сделать следующее:

var stream = new MemoryStream(byteArray);
fileStreamResult = new FileStreamResult(stream, "application/pdf");
return (ActionResult)fileStreamResult;

Я предполагаю, что поток должен оставаться открытым, если я буду обеспокоен про утечки памяти или IIS закрывает поток? Есть ли лучшие альтернативы?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Использование операторов закрывает и выгружает переменную из памяти, установленной в операторе использования, поэтому вы получаете сообщение об ошибке, пытаясь получить доступ к закрытому потоку памяти. Вам не нужно использовать оператор using, если вы просто собираетесь вернуть результат в конце.

Использование операторов полезно для того, чтобы позаботиться об удалении данных из памяти, но вы всегда можете сами утилизировать данные с помощью .dispose ()

0 голосов
/ 22 апреля 2020

Почему вы держите return (ActionResult)fileStreamResult; снаружи, используя блок?

...