ASP.NET Core中HttpClient遇「目标机器主动拒绝连接」错误求助
可能的原因及排查步骤
检查应用网络环境
确认运行ASP.NET Core应用的机器和Postman所在机器是否为同一设备。若不是,先测试应用所在机器能否ping通192.168.10.25,再用telnet 192.168.10.25 端口号(比如目标接口用80端口就填80)验证端口连通性。部分场景下,应用可能被防火墙、内网策略或VPN限制了访问权限,而Postman所在机器的网络配置不受此限制。核对请求地址与参数
逐行对比代码中的请求URL和Postman里的实际请求:
代码拼接后的地址是http://192.168.10.25/api/getToken/getitss?username=Ahmad&password=ahmad@123,需确认Postman的路径、参数(包括大小写、特殊字符)完全一致。另外,BaseAddress末尾带/、请求路径开头无/的拼接逻辑是正确的,但要再次确认目标接口的实际路径是否为api/getToken/getitss。调整HttpClient调用方式
代码中使用.Result同步阻塞调用虽不会直接导致连接拒绝,但可能引发线程池或死锁问题,建议改为异步调用尝试:// 在异步方法内执行 using HttpClient client = new HttpClient(); client.Timeout = TimeSpan.FromMinutes(30); client.BaseAddress = new Uri("http://192.168.10.25/"); HttpResponseMessage getTokenresponse = await client.GetAsync("api/getToken/getitss?username=Ahmad&password=ahmad@123"); getTokenresponse.EnsureSuccessStatusCode(); // 先验证请求状态 string content = await getTokenresponse.Content.ReadAsStringAsync(); string token = content.Replace(@"\""", "").Replace(@"\\", "");另外,HttpClient应尽量复用而非每次实例化,但这并非当前连接问题的直接诱因,属于优化项。
检查目标服务监听配置
确认目标服务http://192.168.10.25的绑定地址是否为0.0.0.0(允许所有IP访问),若服务仅绑定localhost或特定网卡,则仅能从本机或指定机器访问。可查看目标服务的启动日志或配置文件,确认监听地址设置。排查代理服务器影响
Postman可能配置了代理,而ASP.NET Core应用未配置,或反之。可在HttpClient中显式禁用代理测试:var handler = new HttpClientHandler { UseProxy = false, Proxy = null }; using HttpClient client = new HttpClient(handler); // 后续请求逻辑不变确认目标服务状态
虽Postman能正常访问,但仍需确认调试期间目标服务未重启、端口未被其他进程占用。可重新用Postman调用一次,验证服务可用性。
内容的提问来源于stack exchange,提问作者abdul wahid

