Tengo un método para descargar el archivo s3
Método
Public ActionResult download(string filename, string credentials) { .... Using(stream res = response from s3) { return file(res, type, filename); } }Pero la excepción se lanza al ejecutar el método anterior.
Mensaje de excepción: la solicitud se canceló: la conexión se cerró inesperadamente
Tengo que liberar el objeto 'res' de la transmisión después de la descarga.
En el caso del método File para devolver un ActionResult , está transfiriendo la responsabilidad de cerrar la secuencia al resultado de la acción, por lo que, de hecho , no desea llamar a Dispose o usar using . Esto es para que ActionResult no necesite almacenar en búfer los datos. Entonces: solo saca el using :
public ActionResult Download(string filename, string credentials) { .... var res = /* response from s3 */ return File(res, type, filename); }Si tiene un código no trivial, puede hacerlo más complejo:
public ActionResult Download(string filename, string credentials) { .... Stream disposeMe = null; try { // ... disposeMe = /* response from s3 */ // ... var result = File(disposeMe, type, filename); disposeMe = null; // successfully created File result which // now owns the stream, so *leave stream open* return result; } finally { disposeMe?.Dispose(); // if not handed over, dispose } }