Asp.net core Odata和IAsyncEnumerable

Asp.net core Odata和IAsyncEnumerable,asp.net-core,.net-core,odata,asp.net-core-3.1,c#-8.0,Asp.net Core,.net Core,Odata,Asp.net Core 3.1,C# 8.0,我们的应用程序API使用odata,在升级到.net core 3.1(我们使用.net core 2.2)之前,odata查询能够处理大型数据集(用于网格导出),没有任何问题。但从3.1开始,我们达到了IAsyncEnumerable缓冲区限制8192。缓冲区限制的最佳解决方法是什么?增加限制是不可能的,因为用户可以导出任何数量的可能超过缓冲区大小的记录 我确实注意到odata响应是分块的,所以我尝试使用JavaScript读取响应流,但这也会导致缓冲区异常发生。我遇到了相同的问题(odata

我们的应用程序API使用odata,在升级到.net core 3.1(我们使用.net core 2.2)之前,odata查询能够处理大型数据集(用于网格导出),没有任何问题。但从3.1开始,我们达到了IAsyncEnumerable缓冲区限制8192。缓冲区限制的最佳解决方法是什么?增加限制是不可能的,因为用户可以导出任何数量的可能超过缓冲区大小的记录


我确实注意到odata响应是分块的,所以我尝试使用JavaScript读取响应流,但这也会导致缓冲区异常发生。

我遇到了相同的问题(odata/.Net Core 3.1,使用Power BI Desktop作为客户端应用程序)

在控制器方法上设置页面大小解决了我的问题:

[EnableQuery(PageSize = 100)]
public IActionResult Get()
{
    return Ok(AppDbContext.BiContracts.AsQueryable());
}

IAsyncEnumerable本身不缓冲任何内容。您是在谈论
mvcopions.MaxIAsyncEnumerableBufferLimit
?答案是这样的。在任何情况下,人类和网格不能显示超过100行,更不用说8192行了。网格不会在显示之前下载所有数据,它们使用数据虚拟化和分页,特别是在HTML中。像无限滚动这样的技术可以使这成为一个无形的过程。大多数Javascript网格已经支持paging@PanagiotisKanavos网格确实支持分页,但这不是问题所在,当用户试图将网格数据导出到csv文件(他们正在导出所有页面)时,问题就出现了。但这不是您编写的内容。它是什么网格?如果它支持分页,它应该使用相同的分页机制来获取数据。是否网格配置为在UI中分页而不是数据访问?在任何情况下,(可能的)副本解释了选项-使用分页、增加缓冲区大小或不使用IAsyncEnumerable。事实上,与其将所有原始数据发送到网格进行导出,为什么不在服务器上使用例如CsvHelper或Epplus生成CSV或Excel文件?这样会更快,向浏览器发送的数据也会更少