我有一个 ASP.NET MVC 4 Web Api 控制器方法,它传递文件 ID 列表并返回这些文件的缩略图。
因此,客户端可能会传入一个数字 ID 列表(例如 10、303、29),并且该方法返回一个 List,其中 ThumbnailImage 看起来有点像这样:
class ThumbnailImage
{
public int Id { get; set; }
// Some other stuff
public byte[] RawData { get; set; }
}
调用者传入一个 ID 列表而不是对每个项目进行一次调用的原因应该是显而易见的 - 可能有几十个或数百个项目要下载,我试图避免所有需要的 HTTP 流量单独下载它们。
目前,我正在使用 RestSharp 和 JSON.NET,因此我的 ThumbnailImage 对象作为 JSON 通过网络传递。从编码简单性的角度来看,这很好,但 JSON 不是表示二进制数据的有效方式。
所以,我认为我应该将原始字节作为八位字节流返回......但是,虽然我可以轻松地为单个图像执行此操作,但我不确定为多个图像执行此操作的最佳方法,特别是当我还需要返回每个文件的 ID 和其他信息时。(ID 是必需的,因为结果不一定会按给定顺序返回 - 并且某些文件可能会丢失)。
我可以简单地将所有内容零碎地写入响应流,以便为每个项目写入 ID(适当编码),然后是图像数据的长度,然后是图像数据本身,然后是相同的内容下一项,等等。
然后,调用者将简单地继续从流中读取,直到用尽,对 ID 的编码(和长度!)等做出假设。
我认为这会奏效,但它似乎很笨拙 - 有没有更好的方法?