2010-05-11 22 views
5

¿Cuál es la forma correcta de eliminar recursos cuando un método en el controlador devuelve archivos de ruta o archivo o archivoscontentresulta objetos?MVC - disponer recursos en el controlador

Por ej cuando se hace algo, como a continuación:

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

TIA

Respuesta

6

Un FileStreamResult (que es lo que se creó) envuelve la corriente en un comunicado mediante escritura de archivo cuando se llama durante la ejecución del resultado. Esto cerrará y eliminará la corriente. Dependiendo del tipo de flujo creado, en realidad puede causar un error para cerrar o ajustar el uso en una instrucción de uso en la acción del controlador.

+0

Curiosamente, envuelve el tipo 'FileStream':' usando (FileStream) '. ¿Qué demonios está pasando allí? ¿'Tipo' es desechable? –

+0

@Jeff - en realidad 'FileStream' es una propiedad que simplemente tiene el mismo nombre que la clase FileStream. – tvanfosson

+0

Oh, cierto, qué demonios estaba pensando. No es typeof (FileStream) - y la propiedad está a unas 7 líneas de distancia. Es hora de obtener más café. D: –

Cuestiones relacionadas