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

ASP.Net React项目调试时抛出HttpRequestException异常求助

ASP.NET + React SpaProxy HTTPS重定向失败(SocketException 10061)排查方案

问题核心

从日志看,SpaProxy尝试连接localhost:44437时被主动拒绝,说明React开发服务器未在该端口监听,或SpaProxy配置的目标端口/协议与实际不符。HTTP能正常访问是因为ASP.NET自身的Kestrel服务独立运行,不受SpaProxy状态影响。

错误日志

System.Net.Http.HttpRequestException: 无法建立连接,因为目标计算机主动拒绝了连接。(localhost:44437)
 ---> System.Net.Sockets.SocketException (10061): 无法建立连接,因为目标计算机主动拒绝了连接。
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
   at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|277_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(HttpRequestMessage request)
   at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.GetHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at Microsoft.AspNetCore.SpaProxy.SpaProxyLaunchManager.IsSpaProxyRunning(CancellationToken cancellationToken)
Microsoft.AspNetCore.SpaProxy.SpaProxyMiddleware: Information: SPA proxy is not ready. Returning temporary landing page.
Microsoft.AspNetCore.Server.Kestrel.Http2: Trace: Connection id "0HMRBQ8D1FNKS" sending HEADERS frame for stream ID 47 with length 35 and flags END_HEADERS.
Microsoft.AspNetCore.Server.Kestrel.Http2: Trace: Connection id "0HMRBQ8D1FNKS" sending DATA frame for stream ID 47 with length 3 and flags NONE.
Microsoft.AspNetCore.Server.Kestrel.Http2: Trace: Connection id "0HMRBQ8D1FNKS" sending DATA frame for stream ID 47 with length 502 and flags NONE.
Microsoft.AspNetCore.Server.Kestrel.Http2: Trace: Connection id "0HMRBQ8D1FNKS" sending DATA frame for stream ID 47 with length 0 and flags END_STREAM.
Microsoft.AspNetCore.Server.Kestrel.Http2: Trace: Connection id "0HMRBQ8D1FNKS" received WINDOW_UPDATE frame for stream ID 0 with length 4 and flags 0x0.
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished HTTP/2 GET https://localhost:7112/ - - - 200 - text/html 4137.3539ms

排查步骤

1. 确认React开发服务器的实际运行端口

  • 检查React项目根目录的.env/.env.development文件,查看是否有PORT=44437配置。如果没有,React默认使用3000端口,需对应调整SpaProxy配置。
  • 单独启动React项目(执行npm start),查看控制台输出的访问地址,确认实际端口是否与日志中的44437一致。

2. 校验SpaProxy配置

  • 打开ASP.NET项目的appsettings.Development.json,找到SpaProxy节点:
    "SpaProxy": {
      "TargetUri": "https://localhost:44437"
    }
    
    • 确保TargetUri的端口与React dev server实际端口一致。
    • 如果React dev server未启用HTTPS,将TargetUri改为HTTP协议(如http://localhost:44437)。
  • 检查Properties/launchSettings.json中的SpaProxyLaunchCommand,确保是正确启动React的命令(如"SpaProxyLaunchCommand": "npm start")。

3. 验证端口监听状态

  • Windows:执行命令netstat -ano | findstr :44437,若无输出则无进程监听该端口;若有输出,检查PID对应的进程是否为React的node.exe。
  • macOS/Linux:执行lsof -i :44437或ss -tulpn | grep :44437,确认端口是否被正确进程占用。
  • 若端口被无关进程占用,杀掉该进程或修改React/SpaProxy的端口配置。

4. 检查React HTTPS配置

  • 若SpaProxy要连接HTTPS的React dev server,需在React项目的package.json中修改start命令:
    "scripts": {
      "start": "HTTPS=true react-scripts start"
    }
    
  • 首次启动HTTPS的React dev server会生成自签名证书,需手动信任该证书(可通过浏览器访问React的HTTPS地址,按照提示安装证书)。

5. 清理缓存与重启服务

  • 清理React项目依赖:rm -rf node_modules package-lock.json && npm install(Windows用rd /s /q node_modules && del package-lock.json && npm install)。
  • 清理ASP.NET项目:dotnet clean && dotnet build。
  • 关闭所有相关进程(node.exe、dotnet.exe),重新启动整个解决方案。

6. 确认SpaProxy版本兼容性

  • 检查ASP.NET项目csproj文件中的Microsoft.AspNetCore.SpaProxy包版本,确保与.NET版本匹配(如.NET 6对应6.x版本,.NET 7对应7.x版本)。
  • 若版本不匹配,执行dotnet add package Microsoft.AspNetCore.SpaProxy --version [对应版本号]更新包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:15:05