首页 > 解决方案 > 包装 using 语句在 api 控制器上引发错误

问题描述

我的 API 控制器上有以下代码行,它们将返回文件。这行代码运行良好,但我想将它们包装到 using 语句中以避免内存泄漏。但如果我这样做,端点不会返回文件并且我收到异常“应用程序引发了未处理的异常。System.ObjectDisposedException:无法访问关闭的流。”

                Stream memory = await _mySrv.GetDocMemoryStream(data);  
                var contentType = filename.GetContentType();
                return File(memory, contentType, "myfile.pdf");

至少在 API 控制器上保留这样的代码是否安全?它会由 .NET 核心框架处理吗?

标签: .netasp.net-coreasp.net-web-api

解决方案


如果您定义您的StreamasMemoryStream然后可以使用ToArray()将流内容放入File结果中。

我在我的一个应用程序中使用了类似的代码。

using (MemoryStream memory = await _mySrv.GetDocMemoryStream(data))
{ 
    var contentType = filename.GetContentType();
    
    return File(memory.ToArray(), contentType, "myfile.pdf");
}   

推荐阅读