Possiedo un metodo ASP.NET MVC 4 Web Api controller che riceve un elenco di ID file e restituisce le immagini di anteprima per tali file.Qual è il modo migliore per servire più file binari da un singolo metodo WebApi?
Quindi, il cliente potrebbe passare in un elenco di ID numerici (ad esempio, 10, 303, 29), e il metodo restituisce una lista in cui un ThumbnailImage sembra un po 'come questo:
class ThumbnailImage
{
public int Id { get; set; }
// Some other stuff
public byte[] RawData { get; set; }
}
La ragione per cui il chiamante passa in una lista di ID invece di fare una chiamata per articolo dovrebbe essere ovvio - potrebbero esserci decine o centinaia di articoli da scaricare, e sto cercando di evitare tutto il traffico HTTP che sarebbe necessario per scaricarli singolarmente .
Attualmente sto utilizzando RestSharp e JSON.NET e quindi i miei oggetti ThumbnailImage vengono passati attraverso il cavo come JSON. Va bene dal punto di vista della semplicità di codifica, ma JSON non è un modo efficace per rappresentare quei dati binari.
Quindi, sto pensando che dovrei restituire i byte grezzi come un flusso ottetto ... tuttavia, mentre posso farlo facilmente per una singola immagine, non sono sicuro del modo migliore per farlo per più immagini, specialmente quando devo anche restituire l'ID e altre informazioni varie per ogni file. (L'ID è richiesto poiché i risultati non verranno necessariamente restituiti in un determinato ordine e alcuni file potrebbero essere mancanti).
I potuto semplicemente scrivere tutto frammentario nel flusso di risposta, in modo che ogni voce scrivo l'ID (codificato), seguito dalla lunghezza dei dati di immagine, seguita dai dati dell'immagine stessa, e poi seguita per la stessa cosa per la voce successiva, ecc
il chiamante avrebbe poi semplicemente continuare a leggere dal flusso fino a quando non è stato esaurito, fare ipotesi circa la codifica (e la lunghezza!) degli ID, ecc
Penso che funzionerebbe, ma sembra clunky - c'è un modo migliore?
Come sarà il client usa le immagini? le immagini per la visualizzazione in una pagina Web? o per il download come archivio? qualcos'altro? – EBarr
Mi chiedo se è possibile inviare la risposta come MultipartContent in cui i contenuti interni potrebbero essere StreamContent con il flusso raw di byte –
@EBarr: sto scrivendo anche l'applicazione client, quindi è un ambiente chiuso. Visualizzerò le immagini all'interno di un'applicazione WinForms (come miniature dei risultati di ricerca) –