使用PushStreamContent将数据拆分为块

时间:2017-09-12 09:23:54

标签: c# asp.net asp.net-web-api

我有一个用Angular 2编写的客户端,它命中了一个返回大量对象的API。我想将其拆分,以便我可以为用户提供一些数据,同时在后台加载其余的数据。

通过在线查看在请求中流式传输数据的方式,PushStreamContent类似乎是最合适的(对更好的建议开放)。我一直在阅读本教程http://blog.guvweb.co.uk/2014/07/02/streaming-web-api/

我试过实现了一个基本的例子,它将流式传输一个数字列表,以便我可以测试它。

我刚刚从浏览器直接访问API以查看它是否返回任何数据。我收到此错误消息。

API Error Page

有人能告诉我我做错了什么吗?

我的控制器类

[Route("numbers")]
[HttpGet]
public IHttpActionResult StreamData()
{
    // Generates a list of numbers 1 --> 1,000,000
    List<int> numbers = _dataAccess.GenerateNumbers();

    var response = Request.CreateResponse();

    response.Content = new PushStreamContent( (stream, Content, context) => 
    {
        try
        {
            foreach (var num in numbers)
            {
                var serializer = new JsonSerializer();
                using (var writer = new StreamWriter(stream))
                {
                    serializer.Serialize(writer, num);
                    stream.Flush();
                }
            }
        }
        finally
        {
            stream.Close();
        }

    });

    return Ok(response);
}

1 个答案:

答案 0 :(得分:1)

我没有发现问题,我自己的常识是罪魁祸首!

我的浏览器正在下载文件而我没有看到它们,API流工作正常!