Tengo un método de controlador Web Api ASP.NET MVC 4 al que se le pasa una lista de ID de archivo y devuelve imágenes en miniatura para esos archivos.¿Cuál es la mejor manera de servir varios archivos binarios a partir de un único método WebApi?
Así, el cliente puede pasar en una lista de identificadores numéricos (por ejemplo, 10, 303, 29), y el método devuelve una lista donde un thumbnailImage se ve un poco como esto:
class ThumbnailImage
{
public int Id { get; set; }
// Some other stuff
public byte[] RawData { get; set; }
}
La razón por la que la persona que llama transfiere una lista de ID en lugar de hacer una llamada por elemento con la esperanza de ser obvio: puede haber docenas o cientos de elementos para descargar, y estoy tratando de evitar todo el tráfico HTTP que se requeriría para descargarlos individualmente .
Actualmente, estoy usando RestSharp y JSON.NET, por lo que mis objetos ThumbnailImage se pasan a través del cable como JSON. Está bien desde el punto de vista de la simplicidad de la codificación, pero JSON no es una forma eficiente de representar esos datos binarios.
Por lo tanto, estoy pensando que debería devolver los bytes sin formato como una secuencia de octetos ... sin embargo, aunque puedo hacerlo fácilmente para una sola imagen, no estoy seguro de la mejor manera de hacerlo para múltiples imágenes, especialmente cuando también necesito devolver la identificación y otra información diversa para cada archivo. (Se requiere la ID porque los resultados no se devolverán necesariamente en un orden determinado, y algunos archivos pueden faltar).
I podía simplemente escribir todo poco a poco en la corriente de respuesta, de modo que para cada elemento escribo el ID (adecuadamente codificada), seguido por la longitud de los datos de imagen, seguido de los propios datos de imagen, y luego seguido por lo mismo para el siguiente elemento, etc.
la persona que llama que luego simplemente seguir leyendo de la corriente hasta que se agotó, hacer suposiciones acerca de la codificación (y longitud!) de las identificaciones, etc.
Creo que funcionaría, pero parece torpe: ¿hay una mejor manera?
¿Cómo se el cliente usa las imágenes, ¿las imágenes se muestran en una página web o para descargarlas como archivo? ¿Algo más? – EBarr
¿Se pregunta si puede enviar la respuesta como un contenido multipartido donde los contenidos internos podrían ser StreamContent con el flujo de bytes sin formato? –
@EBarr: también estoy escribiendo la aplicación cliente, por lo que es un entorno cerrado. Mostraré las imágenes en una aplicación WinForms (como miniaturas de resultados de búsqueda). –