You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于HTTP API流式传输JSON数据时的错误上报问题

.NET 7+ 流式 IAsyncEnumerable MVC 端点的异常处理最佳实践

场景背景

我有一个返回IAsyncEnumerable<int>的MVC端点,从数据库表中通过游标流式读取数据行(数据库驱动支持IAsyncEnumerable游标查询),代码示例如下:

[HttpGet]
public async IAsyncEnumerable<int> SomeEndpoint() {
  await foreach (var row in PerformSelectQuery())
    yield return int.Parse(row[0]);
}

目前.NET与System.Text.Json的默认处理完全正常:响应会自动设置Transfer-Encoding: chunked,数据库返回第一行数据时就开始写入响应,无需缓冲内存,客户端也能更快解析结果(如果支持流式解析的话)。

当前遇到的问题

当数据行中某列存在null值时(比如90000行中的第24645行),int.Parse会抛出异常,此时.NET会直接断开连接,客户端(比如Postman)只能知道请求被中止,无法获取具体的错误信息。

如果在foreach中捕获异常并执行yield break,请求会静默终止,客户端依然不知道返回结果不完整,也无法得知错误原因。

已尝试的方案

  • Result/Option monad包装返回值:将每个返回值用Result/Option类型包装后序列化到流中,捕获错误后可以选择中止或继续返回后续数据,但这种方式面临多态序列化的实现难点。
  • HTTP Trailer头:了解到Trailer可以在响应末尾附加元数据,但它存在诸多问题:客户端支持度低、使用复杂、控制器中设置方式不明确、没有标准化的错误上报格式,且无法修改HTTP状态码;更关键的是.NET不支持HTTP/1.1的Trailer,因此无法使用。

寻求建议

我在提问前已做过大量搜索,目前未找到明确的解决方案,Stack Overflow上也有其他人提出相同疑问但未获回复。现寻求.NET 7+环境下该场景的最佳实践,以及类似问题的处理经验,同时欢迎任何相关的技术建议。

内容的提问来源于stack exchange,提问作者Ar Es

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:15:07