ASP.NET Cómo transmitir archivos al usuario

Inicialmente estaba tratando de averiguar cuál es la diferencia entre Response.Close y Response.End, pero después de hacer más búsquedas en Google e investigar, está claro que no he visto una forma común de devolver un Byte [] al cliente. Dejaré el ejemplo del código a continuación, pero me gustaría saber cuál es el estándar de la industria para hacer esto.

Byte[] myBytes = GetReportBytes(); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.AppendHeader("content-length", myBytes.Length.ToString()); HttpContext.Current.Response.AppendHeader("content-Disposition", "attachment;filename=" + this.ReportFileName + GetReportExtension()); HttpContext.Current.Response.ContentType = GetApplicationContentType(); HttpContext.Current.Response.BinaryWrite(myBytes); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.Close(); //CERT FIX //HttpContext.Current.Response.End(); 

No llamaría a Response.Close() ni a Response.End() .

Response.End() detendrá la ejecución / representación de la página en ese punto. No se ejecutará ningún código después de Response.End() . La respuesta finaliza en ese punto sin agregar más salidas a la transmisión.

Response.Close() es similar a Response.End() , pero permite que el código se ejecute después de que se llame (pero no se pueden enviar más resultados en la respuesta de la página).

Response.Flush() enviará los elementos de respuesta restantes a la página.

De un miembro del equipo central de IIS :

Response.Close envía un paquete de reinicio al cliente y su uso en cualquier otra condición que no sea de error dará lugar a todo tipo de problemas, por ejemplo, si está hablando con un cliente con latencia suficiente, el paquete de reinicio puede causar cualquier otro dato de respuesta almacenado en el servidor, cliente o en algún punto intermedio para ser descartado.

En este caso particular, la compresión implica buscar patrones comunes dentro de la respuesta y el código de compresión tiene que amortiguar alguna cantidad de respuesta para boost la probabilidad de encontrar patrones de repetición más largos: esta parte que está almacenada no se puede enviar al cliente una vez que hacer Response.Close ().

En resumen, no use Response.Close ().