У меня есть метод ASP.NET MVC 4 Web Api, который получает список идентификаторов файлов и возвращает уменьшенные изображения для этих файлов.
Таким образом, клиент может передать список числовых идентификаторов (например, 10, 303, 29), а метод возвращает список, в котором ThumbnailImage выглядит примерно так:
class ThumbnailImage
{
public int Id { get; set; }
// Some other stuff
public byte[] RawData { get; set; }
}
Причина, по которой вызывающий абонент переходит в список идентификаторов, а не делает один вызов для каждого элемента, должен надеяться быть очевидным - для загрузки могут быть десятки или сотни элементов, и я пытаюсь избежать всего HTTP-трафика, который необходимо загрузить их отдельно.
В настоящее время я использую RestSharp и JSON.NET, поэтому мои объекты ThumbnailImage передаются через провод как JSON. Это хорошо с точки зрения простоты кодирования, но JSON не является эффективным способом представления этих двоичных данных.
Итак, я думаю, что я должен вернуть необработанные байты в виде октетного потока... однако, хотя я могу легко сделать это для одного изображения, я не уверен, что это лучший способ сделать это для несколько изображений, особенно когда мне также нужно вернуть идентификатор и другую другую информацию для каждого файла. (Идентификатор требуется, поскольку результаты не обязательно будут возвращены в заданном порядке - и некоторые файлы могут отсутствовать).
Я мог бы просто написать все по частям в поток ответов, так что для каждого элемента я пишу идентификатор (соответствующим образом закодированный), за которым следует длина данных изображения, а затем сами данные изображения, а затем за ним следует тот же вещь для следующего элемента и т.д.
Затем вызывающий абонент просто продолжал чтение из потока до его исчерпания, делая предположения о кодировке (и длине!) идентификаторов и т.д.
Я думаю, что это сработает, но кажется неуклюжим - есть ли лучший способ?