MVC - 在控制器中配置资源

Sof*_*eek 5 asp.net-mvc resources dispose controller

当控制器中的方法返回文件流或文件或filecontentresult对象时,处理资源的正确方法是什么?

做以下事情的前者:

   using CrystalDecisions.CrystalReports.Engine;

public ActionResult Report()
{
    ReportClass rptH = new ReportClass();
    rptH.FileName = Server.MapPath("[reportName].rpt");
    rptH.Load();
    rptH.SetDataSource([datatable]);
    Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
    return File(stream, "application/pdf");   
}
Run Code Online (Sandbox Code Playgroud)

TIA

tva*_*son 6

在结果执行期间调用WriteFile时,FileStreamResult(创建的内容)将流包装在using语句中.这将关闭并处理流.根据创建的流的类型,它实际上可能导致错误,以关闭或包装控制器操作中的using语句中的用法.

  • @BhejaFry - 是的,它将为你关闭流.实际上,由于写入直到返回之后才会发生,我认为最好的做法是**NOT**关闭代码中的流,无论是显式还是使用using语句.如果要显式处理关闭,则应使用带有字节数组而不是流的覆盖,并自行从流中获取字节. (2认同)