#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, а не на любые другие порты.
Если проблема не устранена, проверьте конфигурацию вашего маршрутизатора или коммутатора, если таковая имеется в вашем маршруте к серверу.