将Json数据流式传输到ASP.NET ApiController

问题描述 投票:0回答:1

[我正在尝试编写一个ApiController,以在响应中流式传输JSON数据。它像这样;

public class MyController : ApiController
{
    IDocumentWriter _writer;

    public MyController(IDocumentWriter writer)
    {
        _writer = writer;
    }

    [HttpGet]
    public async Task<HttpResponseMessage> Get()
    {
        var response = Request.CreateResponse(HttpStatusCode.OK);

        using (var stream = new MemoryStream())
        {
            response.Content = new StreamContent(stream);
            await _writer.WriteAsync(stream);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            response.Content.Headers.ContentLength = stream.Length;
        }

        return response;
    }
}

IDocumentWriter接受流并将JSON数据写入其中。对Get的调用失败,并显示System.Threading.Tasks.TaskCanceledException,我不明白,因为我正在等待WriteAsync。它肯定在返回之前完成写操作吗?我在做什么错?

c# asp.net asp.net-apicontroller
1个回答
0
投票

由于this post,我知道了。原来我是在使事情复杂化。这是最终的解决方案;

[HttpGet]
public HttpResponseMessage Get()
{
    var response = Request.CreateResponse(HttpStatusCode.OK);

    response.Content = new PushStreamContent(async (stream, content, context) =>
    {
        await _writer.WriteAsync(stream);
        stream.Close();
    }, "application/json");

    return response;
}
© www.soinside.com 2019 - 2024. All rights reserved.