.NET应用SocketException连接被拒绝问题求助
.NET应用登录接口SocketException错误排查
错误信息
SocketException: 由于目标机器积极拒绝,无法连接。
该错误仅出现在用户名密码登录环节,其他API运行正常,错误触发于以下客户端调用代码:
public class AppService : IAppService { public async Task<MainResponse> AuthenticateUser(LoginModel loginModel) { var returnResponse = new MainResponse(); using (var client = new HttpClient()) { var url = $"{Setting.BaseUrl}{UserAPIs.AuthenticateUser}"; var serializedStr = JsonConvert.SerializeObject(loginModel); var response = await client.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { string contentStr = await response.Content.ReadAsStringAsync(); returnResponse = JsonConvert.DeserializeObject<MainResponse>(contentStr); } } return returnResponse; } }
对应API控制器代码
[AllowAnonymous] [HttpPost("AuthenticateUser")] public async Task<IActionResult> AuthenticateUser(LoginModel authenticateUser) { try { var user = await _userManager.FindByNameAsync(authenticateUser.UserName); if (user == null) return Unauthorized(); bool isValidUser = await _userManager.CheckPasswordAsync(user, authenticateUser.Password); if (isValidUser) { string accessToken = GenerateAccessToken(user); var refreshToken = GenerateRefreshToken(); await _userManager.UpdateAsync(user); var role = await _userManager.GetRolesAsync(user); int? roleID = null; switch (role?.FirstOrDefault()) { case "Admin": roleID = (int)RoleEnum.Admin; break; case "Student": roleID = (int)RoleEnum.Student; break; case "Teacher": roleID = (int)RoleEnum.Teacher; break; } var response = new MainResponse { Content = new AuthenticationResponse { RefreshToken = refreshToken, AccessToken = accessToken, RoleID = roleID }, IsSuccess = true, ErrorMessage = "" }; return Ok(response); } else { return Unauthorized(); } } catch (Exception ex) { var response = new MainResponse { Content = new AuthenticationResponse { RefreshToken = null, AccessToken = null, RoleID = null, DeviceToken = null }, IsSuccess = true, ErrorMessage = ex.Message }; return Ok(response); } }
排查方向
- URL拼接验证:确认
Setting.BaseUrl与UserAPIs.AuthenticateUser拼接后的完整路径是否正确,比如是否存在多斜杠、路径前缀缺失(如api/),或环境配置(开发/生产)不一致。 - 路由匹配检查:查看控制器是否带有全局路由前缀(如
[Route("api/[controller]")]),确保客户端请求URL与接口路由完全匹配。 - 端口与防火墙:用
netstat -ano确认登录接口使用的端口未被其他进程占用,同时检查本地防火墙是否拦截了该端口的请求。 - 接口可用性测试:直接用Postman等工具调用登录接口,验证接口本身是否能正常响应,排除客户端代码问题。
- 内部异常排查:在控制器的
try-catch中添加日志输出,检查GenerateAccessToken、GenerateRefreshToken等方法是否抛出未捕获的异常,导致接口无法正常启动。
内容的提问来源于stack exchange,提问作者Muzzammil Mahomed
相关产品推荐
相关产品推荐

