¿Cuál es la mejor manera de devolver una imagen con 2 parámetros (xey para cambiar el tamaño)?
Por ejemplo
~/api/image12345/200/200
Devolverá un 200 por 200 jpg / png / o gif
¿Debo devolver un System.Drawing.Image
objeto o definir manualmente el HTTPReponseMessage.Content
?
asp.net
asp.net-web-api
image
Max Alexander
fuente
fuente
Respuestas:
No debe devolver un
System.Drawing.Image
, a menos que también agregue un formateador que sepa cómo convertir eso en los bytes apropiados, no se serialice como los bytes de imagen como es de esperar.Una posible solución es devolver un
HttpResponseMessage
con la imagen almacenada en su contenido (como se muestra a continuación). Recuerde que si desea la URL que mostró en la pregunta, necesitará una ruta que asigne los parámetros {imageName}, {width} y {height}.public HttpResponseMessage Get(string imageName, int width, int height) { Image img = GetImage(imageName, width, height); using(MemoryStream ms = new MemoryStream()) { img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new ByteArrayContent(ms.ToArray()); result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); return result; } }
Pero nuevamente, si está haciendo esto en muchos lugares, ir por la ruta del formateador puede ser la forma "recomendada". Como casi todo en programación, la respuesta dependerá de tu escenario.
fuente
GetImage
método?Las imágenes son pesadas. ASP.NET WebForms, HttpHandlers, MVC y Web API hacen un trabajo absolutamente terrible al servir archivos estáticos. IIS hace un trabajo extremadamente bueno en eso, a menudo de 20 a 100 veces más eficiente.
Si desea obtener un buen rendimiento, reescriba la URL a más tardar durante PostAuthorizeRequest, para que IIS pueda recoger y entregar el archivo. Sí, esto significa manejo de eventos a nivel de HttpModule.
[Descargo de responsabilidad: soy el autor del siguiente artículo y proyecto de código abierto]
Si está haciendo algo dinámico con imágenes, consulte este artículo sobre las dificultades que debe evitar el procesamiento de imágenes y considere echar un vistazo a ImageResizer . Tiene un excelente almacenamiento en caché de disco (que utiliza el manejo de archivos estáticos IIS) y es fácil de conectar a la generación de imágenes de cualquier tipo. También tiene enlaces opcionales para AForge, FreeImage y WIC, si necesita avanzar.
fuente