我有一个返回 IAsyncEnumerable 的控制器操作。它查询一个数据源,如果数据可用,每个结果都是“yield return”-ed(由 System.Text.Json 序列化并返回给客户端)。但是,如果没有可用的结果,如何将状态代码设置为 404?现在,如果没有可用的结果,该方法返回一个空的 JSON 数组,状态码 = 200。
public async IAsyncEnumerable<string> GetStrings()
{
IEnumerable<string> stringResults = await myData.GetStringsAsync();
if (stringResults is object && stringResults.Any())
{
foreach (string result in stringResults)
{
yield return result;
}
}
else
{
return NotFound(); //CS1622: Cannot return a value from an iterator....
}
}
更新
一旦结果可用,我希望此流式传输到客户端。如果我返回Task<IEnumerable<string>>
,那么整个列表/数组/集合必须在移交给System.Text.Json进行序列化之前完成。我不认为这是非常节省内存的。