MVC - распоряжаться ресурсом в контроллере - PullRequest
5 голосов
/ 11 мая 2010

Как правильно распоряжаться ресурсами, когда метод в контроллере возвращает файловый поток или объект файла или содержимого файла?

Например, если вы делаете что-то вроде ниже:

   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");   
}

ТИА

1 Ответ

6 голосов
/ 11 мая 2010

FileStreamResult (то есть то, что создано) оборачивает поток в оператор using при вызове WriteFile во время выполнения результата. Это закроет и избавится от потока. В зависимости от типа созданного потока это может привести к закрытию или переносу ошибки в операторе using в действии контроллера.

...