如何通过odata传输数据?

时间:2015-04-27 21:50:10

标签: c# odata asp.net-web-api2

我目前有一条路由返回存储在protobuf文件中的日期数据存档。 目前,我使用PushStreamContent将结果写回json。这是我目前做的::

[HttpGet,Route(...)]
public async Task<HttpResponseMessage>(
    string asset, 
    DateTime archiveDate, 
    CancellationToken token
){
    var archivedData = await _archiveService.GetArchivedData(asset,archiveDate,token);
    if(archivedData == null){
        return await NotFound().ExecuteAsync(token).ConfigureAwait(false);
    }
    var response = Request.CreateResponse(HttpStatusCode.OK);
    var res = ConvertToWire(asset,archivedData);
    var typeFormatter = Configuration.Formatters.First();

    response.Content = new PushStreamContent(async (stream, content, transport) =>
        {
            using (var outerStream = new BufferedStream(stream, 8*1024))
            {
                await typeFormatter.WriteToStreamAsync(res.GetType(), res, outerStream,
                    content, transport, token).ConfigureAwait(false);
            }
            stream.Close();
        }, JsonUtf8);
    return response;
  };

ConvertToWire基本上了解我们支持的资产,并应用有线格式并将其返回为IEnumerable<T>。我可以相当轻松地返回IQueryable<T>res.ToQueryable())。通过这种方法,我可以非常轻松地将数据流出文件。 如何添加对Odata的支持,同时仍保持流式传输结果集的能力。一些资产具有非常大的文件大小(50+ mb),因此需要流式传输。

0 个答案:

没有答案