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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:52:23