我有以下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。
那么,如何让这段代码流这些数字呢?我使用.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开发的网络选项卡来检查。
您发现它只显示所有数字的原因是根据您的浏览器功能,但在网络选项卡内它是一堆数字。
结果: