从 C# .NetCore API 返回 FileStreamResult 时无法访问关闭的 Stream

kpg*_*kpg 2 c# memorystream using filestreamresult .net-core

C# .Net-Core 3.1

在我的 C# api 中,我在 FileStreamResult 中返回一个 pdf 文件,效果很好。

一般来说,我将流包装在 using 中,但是此代码失败并显示 Cannot access a closed Stream.

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

所以我需要这样做:

var stream = new MemoryStream(byteArray);
fileStreamResult = new FileStreamResult(stream, "application/pdf");
return (ActionResult)fileStreamResult;
Run Code Online (Sandbox Code Playgroud)

我假设流需要保持打开状态,我应该担心内存泄漏还是 IIS 会关闭流吗?有更好的选择吗?

小智 5

using 语句关闭并从 using 语句中设置的内存中卸载变量,这就是您在尝试访问关闭的内存流时收到错误的原因。如果您只想在最后返回结果,则不需要使用 using 语句。

using 语句对于从内存中删除数据很有用,但您始终可以使用 .dispose() 自行处理数据

  • 我最终将其转换为使用“FileContentResult”,它接受字节数组,因此我不需要打开内存流。 (2认同)