Gar*_*ill 14 c# rest asp.net-web-api
我有一个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; }
}
Run Code Online (Sandbox Code Playgroud)
调用者传入ID列表而不是每个项目调用一次的原因应该是显而易见的 - 可能要下载数十个或数百个项目,并且我正在尝试避免所需的所有HTTP流量单独下载它们.
目前,我正在使用RestSharp和JSON.NET,因此我的ThumbnailImage对象作为JSON通过网络传递.从简单编码的角度来看,这很好,但JSON不是表示二进制数据的有效方式.
所以,我认为我应该将原始字节作为八位字节流返回...但是,虽然我可以轻松地为单个图像执行此操作,但我不确定为多个图像执行此操作的最佳方法,特别是当我还需要为每个文件返回ID和其他其他信息时.(该ID是必需的,因为结果不一定以给定的顺序返回 - 并且某些文件可能丢失).
我可以简单地将所有内容零碎地写入响应流中,以便为每个项目编写ID(适当编码),然后是图像数据的长度,然后是图像数据本身,然后是相同的内容.下一个项目等
然后,调用者将简单地继续从流中读取,直到它耗尽为止,对ID的编码(和长度!)做出假设等.
我认为这样可行,但看起来很笨 - 有更好的方法吗?
Gar*_*ill 11
好的,这里有一段似乎有用的代码,使用了KiranChalla提到的MultipartContent.(这只是一个虚拟示例,它显示了如何返回两个不同类型的文件,以及一个JSON编码的"对象"(在这种情况下只是一个整数ID列表).
public HttpResponseMessage Get()
{
var content = new MultipartContent();
var ids = new List<int>() { 1, 2 };
var objectContent = new ObjectContent<List<int>>(ids, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
content.Add(objectContent);
var file1Content = new StreamContent(new FileStream(@"c:\temp\desert.jpg", FileMode.Open));
file1Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("image/jpeg");
content.Add(file1Content);
var file2Content = new StreamContent(new FileStream(@"c:\temp\test.txt", FileMode.Open));
file2Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("text/plain");
content.Add(file2Content);
var response = new HttpResponseMessage();
response.Content = content;
return response;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10272 次 |
最近记录: |