Asp.net web api 在WebAPI中使用PushStreamContent时,如何满足多字节范围?
我需要使用Asp.net web api 在WebAPI中使用PushStreamContent时,如何满足多字节范围?,asp.net-web-api,Asp.net Web Api,我需要使用PushStreamContent,因为我的数据源(实际上必须连接blob),但我还必须支持多字节范围的请求(与存储的blob不对齐的任意范围)。我不清楚的是,我是否可以使用PushStreamContent生成multipart/byteranges响应,如果每个范围需要在响应中分开,如果是,如何做,以及它与PushStreamContent调用的分块传输编码的关系。您可以使用MultipartContent这样做: public class MyRangeController :
PushStreamContent
,因为我的数据源(实际上必须连接blob),但我还必须支持多字节范围的请求(与存储的blob不对齐的任意范围)。我不清楚的是,我是否可以使用PushStreamContent
生成multipart/byteranges
响应,如果每个范围需要在响应中分开,如果是,如何做,以及它与PushStreamContent
调用的分块传输编码的关系。您可以使用MultipartContent
这样做:
public class MyRangeController : ApiController
{
[HttpGet]
public HttpResponseMessage Get()
{
// Create a multi-part content object for the response; note that per RFC spec, subtype must be "byteranges"
// Note that the content type of the over-all response will be "multipart/byteranges"
// We choose to use a GUID string for the separator; it could be anything suitable.
var multipartContent = new MultipartContent("byteranges", Guid.NewGuid().ToString("D"));
// Create the response object and set its content
var response = new HttpResponseMessage(HttpStatusCode.PartialContent) { Content = multipartContent };
foreach (var rangeItemHeaderValue in Request.Headers.Range.Ranges)
{
// Create PushStreamContent object for our current byte range...
var pushStreamContent = new PushStreamContent((stream1, content, arg3) =>
{
// Write to stream1
stream1.Close();
});
// We need to add certain headers to each part of the response
pushStreamContent.Headers.ContentRange = new ContentRangeHeaderValue(rangeItemHeaderValue.From.Value, rangeItemHeaderValue.To.Value, /* total size of the resource */);
pushStreamContent.Headers.ContentType = new MediaTypeHeaderValue(/* Set a content type for each part of the response */);
// Add the part to the multi-part content response
multipartContent.Add(pushStreamContent);
}
return response;
}
}