tutorial net maphttproute example asp apicontroller download asp.net-web-api large-files

download - maphttproute - Transmisión de imágenes de gran tamaño con ASP.Net Webapi



web api rest c# (2)

Estamos tratando de devolver archivos de imagen grandes utilizando ASP.Net WebApi y utilizando el siguiente código para transmitir los bytes al cliente.

public class RetrieveAssetController : ApiController { // GET api/retrieveasset/5 public HttpResponseMessage GetAsset(int id) { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); string filePath = "SomeImageFile.jpg"; MemoryStream memoryStream = new MemoryStream(); FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read); byte[] bytes = new byte[file.Length]; file.Read(bytes, 0, (int)file.Length); memoryStream.Write(bytes, 0, (int)file.Length); file.Close(); httpResponseMessage.Content = new ByteArrayContent(memoryStream.ToArray()); httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); httpResponseMessage.StatusCode = HttpStatusCode.OK; return httpResponseMessage; } }

El código anterior funciona bien, pero algunos de los archivos que manejamos podrían tener un tamaño de 2 GB o superior, lo que da como resultado tiempos de espera de conexión. Hemos utilizado un código similar al de abajo en el pasado (usando HttpHandlers) para dividir la respuesta al flujo de respuesta para mantener la conexión activa con éxito.

byte[] b = new byte[this.BufferChunkSize]; int byteCountRead = 0; while ((byteCountRead = stream.Read(b, 0, b.Length)) > 0) { if (!response.IsClientConnected) break; response.OutputStream.Write(b, 0, byteCountRead); response.Flush(); }

¿Cómo podemos utilizar una técnica similar utilizando el nuevo modelo de programación WebAPI que se mostró anteriormente?

Gracias de antemano