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

API请求失败排查:HttpRequestException与HttpIOException异常分析

API自调用抛出请求异常的可能原因

我有一个API,能正常处理worker发来的POST和GET请求,但自己发送POST或GET请求时,会抛出以下异常:

HttpRequestException: An error occurred while sending the request.

HttpIOException: The response ended prematurely. (ResponseEnded)

已知问题出在服务器/API端,以下是调用失败的其中一个端点代码:

app.MapPost("/jobs/{id}/delete", async (Guid id) =>
{
    if (jobs[id].Status == "Processing") 
        return Results.BadRequest("Cannot delete a job that is being processed.");

    jobs.TryRemove(id, out _);

    lock (_fileLock) 
    { 
        SaveData(jobs, jobQueue, jsonJobs, jsonQueue);
    }

    return Results.Ok();
});

相关项目代码已上传至GitHub仓库,若不信任文件可查看名为"IF YOU DONT TRUST"的文件。

可能的故障原因

  • 自调用地址/端口问题:如果API在本地或容器内运行,自调用时用了错误的地址(比如容器内用localhost指向自身而非宿主机API),或者端口被占用,都会导致请求无法正常完成,触发响应提前结束的异常。
  • 同步锁阻塞线程池:端点里的lock (_fileLock)会阻塞当前线程,如果SaveData写文件耗时久,自调用时可能因为并发请求占满线程池,后续请求得不到处理,最终超时抛出异常。worker请求频率低,线程资源充足,所以没触发问题。
  • jobs字典线程不安全:直接访问jobs[id]没加锁,自调用并发请求时可能出现字典状态异常(比如键不存在、修改冲突),引发未捕获的错误,导致响应提前终止。worker请求可能有同步机制,所以没出问题。
  • SaveData内部IO异常:SaveData写文件时可能遇到权限不足、文件被占用等IO错误,但没捕获异常,导致请求未正常返回响应,客户端收到提前结束的错误。worker环境的文件权限或访问方式不同,所以没触发。
  • 客户端超时配置差异:自调用用的HttpClient超时设置过短,而worker的客户端超时更长。当SaveData耗时超过自调用客户端的超时时间,就会抛出HttpRequestException,worker请求则能正常等待完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:39