Вызов Api, возвращающий исключение

#c# #.net #rest #.net-core #monogame

#c# #.net #rest #.net-ядро #моногейм

Вопрос:

Я разрабатываю игру с использованием Monogame, и я хочу получить доступ к своему Api, чтобы я мог войти в систему, но он всегда возвращает мне исключение. Если я использую порт 80, я получаю следующий, No connection could be made because the target machine actively refused it а если я использую порт 5000, я получаю 401: Not authorized . Печатая в консоли, я мог бы прийти к выводу, что моя попытка прервана на строке response = await client.GetStringAsync(builder.Uri.AbsoluteUri); , что-то не так с моим кодом?

Класс связи

 public class Communication
    {
        private readonly HttpClient client = new HttpClient();
        private const string Uri = "http://localhost:5000/";
        private const int Port = 5000;

        public Communication()
        {
           
        }
        public async Task<User> Login(string username, string password)
        {
            string response;
            User user = null;

            try
            {
                var builder = new UriBuilder(Uri   "/Api/Account/Login/")
                {
                    Port = Port
                };
                builder.Query = $"Username={username}amp;Password={password}";
                Debug.WriteLine("Chegou Aqui!!!!")
                response = await client.GetStringAsync(builder.Uri.AbsoluteUri);

                if (response == "OK")
                {

                    user = JsonConvert.DeserializeObject<User>(response);

                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("tERROR {0}", ex.Message);

            }

            return user;
        }



    }
 

Мой метод входа в Api

  [AllowAnonymous]
        [HttpPost("Login")]
        public IActionResult Authenticate([FromBody]AuthenticateModel userModel)
        {
            
            var user = _userService.Authenticate(userModel.Username, userModel.Password);

            if(user == null)
            {
                return BadRequest(new { message = "Username or Password invalid" });
            }

            var tokenHandler = new JwtSecurityTokenHandler();
            
            var key = Encoding.ASCII.GetBytes(_appSettings.Secret);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Name, user.Id.ToString())
                }),
                Expires = DateTime.UtcNow.AddDays(7),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };

            var token = tokenHandler.CreateToken(tokenDescriptor);

            var tokenString = tokenHandler.WriteToken(token);

            return Ok(new
            {
                Id = user.Id,
                UserName = user.Username,
                Token = tokenString
            }) ;
        }
 

Ответ №1:

Возможно, эта статья поможет вам

Вы можете проверить настройки своего брандмауэра или, если в вашей системе установлен какой-либо антивирус, обязательно проверьте его настройки.

Вы получаете ошибку 401: Not authorized , потому что HTTP-запросы по умолчанию настроены на порт 80, а не на любые другие порты.

Если проблема не устранена, проверьте конфигурацию вашего маршрутизатора или коммутатора, если таковая имеется в вашем маршруте к серверу.