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

如何消除调用OpenAI流式API转发响应后出现的‘server closed abruptly (missing close_notify)’提示

如何消除调用OpenAI流式API转发响应后出现的‘server closed abruptly (missing close_notify)’提示

我之前也碰到过这个烦人的问题——明明流式内容已经正常返回了,但每次用curl调用自己的ASP.NET Core转发接口时,都会弹出“server closed abruptly (missing close_notify)”的错误提示,折腾了好一会儿才找到根源。

先说说你的场景:你通过ASP.NET Core写了一个转发接口,手动调用OpenAI的流式聊天补全API,用SendAsync获取响应后逐行读取,再把内容输出给客户端。虽然流式响应能正常工作,但这个错误提示一直挥之不去。

问题根源

其实问题出在处理OpenAI流式返回数据的方式不够健壮。OpenAI的流式返回中,并不是每一条data:开头的行都会携带content属性——比如有些行可能只返回角色信息,或者其他元数据。你原来的代码直接用GetProperty("content")硬取这个属性,一旦遇到没有content的行,就会抛出JsonException,导致你的StreamReader循环提前终止,连接没有被优雅关闭,curl检测到连接意外中断,就会弹出这个提示。

解决方案

把原来解析delta的代码改成安全的属性检查方式,避免因为找不到属性而抛出异常:

var choice = json.RootElement.GetProperty("choices")[0];
if (choice.TryGetProperty("delta", out var deltaElement) && deltaElement.TryGetProperty("content", out var contentElement))
{
    var delta = contentElement.GetString();
    if (!string.IsNullOrEmpty(delta))
    {
        var buffer = Encoding.UTF8.GetBytes(delta);
        await Response.Body.WriteAsync(buffer, 0, buffer.Length);
        await Response.Body.FlushAsync();
    }
}

额外小提示

另外,处理完[DONE]标记后,确保循环能正常结束,让连接优雅关闭。ASP.NET Core通常会帮你处理Response.Body的关闭和flush,但如果有需要,也可以在循环结束后手动调用一次await Response.Body.FlushAsync(),确保所有数据都发送给了客户端。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:00:28