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

ASP.NET 5(Core)本地API调用报错‘Unable to read data from the transport connection: An existing connection was closed’排查求助

排查连接被关闭的API调用问题

首先要明确:你遇到的Unable to read data from the transport connection: An existing connection was closed不是典型的CORS错误——CORS问题通常会在浏览器控制台明确提示跨域相关信息,而这个错误是传输层的连接中断,所以先把排查重点从CORS转移到以下几个方向:

1. 确认API端点是否正常可达

先直接在浏览器或Postman里访问你的API端点(比如https://<API的localhost端口>/api/Employees),看是否能正常返回数据:

  • 如果浏览器无法访问,说明API没有启动,或者端口号、URL路径写错了
  • 检查客户端代码里Url("api/Employees")生成的最终URL是否和API的实际地址完全匹配(包括HTTP/HTTPS、端口号)

2. 排查HTTPS证书信任问题

如果你的API使用HTTPS,本地开发的自签名证书可能不被客户端信任,导致HttpClient主动关闭连接。在开发环境可以临时忽略证书验证(注意生产环境绝对不能这么做):

var handler = new HttpClientHandler();
// 仅开发环境使用,跳过证书验证
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
httpClient = new HttpClient(handler);
httpClient.Timeout = TimeSpan.FromSeconds(5);

3. 优化CORS配置(虽然不是直接原因,但避免潜在问题)

你的CORS配置有几个可以完善的点,同时要注意中间件顺序:

  • 修改默认策略,明确允许必要的HTTP方法和请求头:
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(builder =>
        {
            builder.WithOrigins("https://localhost:44309")
                   .AllowAnyMethod() // 允许所有HTTP方法
                   .AllowAnyHeader(); // 允许所有请求头
        });
    });
    
  • 确保app.UseCors()的顺序正确:要放在app.UseRouting()之后,app.UseAuthorization()之前:
    app.UseRouting();
    app.UseCors(); // 正确位置
    app.UseAuthorization();
    app.UseEndpoints(endpoints => { ... });
    

4. 检查API内部是否抛出未处理异常

服务器主动关闭连接的常见原因是API接口在处理请求时抛出了未捕获的异常(比如数据库连接失败、空引用等):

  • 给EmployeeController的Get方法加日志或断点调试,确认请求到达后是否能正常执行:
    [HttpGet]
    public async Task<IActionResult> GetEmployees()
    {
        try
        {
            var employees = await _employeeRepository.GetAllAsync();
            return Ok(employees);
        }
        catch(Exception ex)
        {
            // 记录日志,查看具体错误
            _logger.LogError(ex, "Failed to retrieve employees");
            return StatusCode(500, "Internal server error");
        }
    }
    
  • 查看API的日志或控制台输出,是否有未处理的异常信息

5. 其他可能性

  • 超时问题:虽然你设置了5秒超时,但如果API处理请求的时间超过这个值,也可能导致连接关闭。可以临时延长超时时间测试,同时优化API的响应速度
  • 防火墙/代理干扰:本地防火墙可能阻止了端口通信,或者代理软件(比如VPN、代理工具)影响了连接,可以暂时关闭防火墙或代理重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:43:12