如何在 ASP.NET Core 8.0 Web API 中禁用 IAsyncEnumerable 缓冲?

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

我有以下API端点:

[HttpGet("test")]
public async IAsyncEnumerable<int> GetStrings()
{
    Random rnd = new();

    foreach (var i in Enumerable.Range(0, 10))
    {
        await Task.Delay(500);
        yield return rnd.Next(100) ;
    }
}

我期望的是每 500 毫秒获得一个数字流,但这并没有发生,而是在 5 秒后将整个有效负载返回给客户端。

那么,如何让这段代码流这些数字呢?我使用.NET 8.0。

c# asp.net-core-webapi asp.net-core-8 iasyncenumerable
1个回答
0
投票

那么,如何让这段代码流这些数字呢?我使用.NET 8.0。

这与您发送请求的方式有关。根据文章,它说

When using System.Text.Json formatter, MVC relies on the support that System.Text.Json added to stream the result.

如果您的应用程序使用正确的包

System.Text.Json
并确保响应标头是
application/json
。然后你每 500 毫秒就会得到一串数字。

您可以使用F12开发的网络选项卡来检查。

您发现它只显示所有数字的原因是根据您的浏览器功能,但在网络选项卡内它是一堆数字。

结果:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.