Я новичок в использовании Xamarin, веб-API и HttpClient.
У меня есть приложение, я пытаюсь получить сообщение из локальной веб-службы, которую я запускаю с помощью HttpClient, и отображать его как простой базовый запуск.
Вот мой код кнопки «Войти»:
private async void Login_Clicked(object sender, EventArgs e)
{
var txtEmail = this.FindByName<Entry>("txtEmail");
var txtPassword = this.FindByName<Entry>("txtPassword");
if ( txtEmail.Text == null )
{
await DisplayAlert("Email", "Please enter your email address!", "OK");
return;
}
if (txtPassword.Text == null)
{
await DisplayAlert("Password", "Please enter your password!", "OK");
return;
}
using (var request = new HttpRequestMessage())
{
request.RequestUri = new Uri("http://82.68.3.61/api/ping");
request.Method = HttpMethod.Get;
request.Headers.Add("Accept", "application/json");
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.SendAsync(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
var json = await response.Content.ReadAsStringAsync();
await DisplayAlert("Success", json, "OK");
}
}
}
}
Вот мой код контроллера веб-приложения:
public class LoginController : Controller
{
[HttpGet]
[Route("api/ping")]
public IActionResult Ping()
{
return Ok("Pong!!");
}
}
Если я использую следующее: https: // локальный: 44309 / api / ping, я получаю сообщение Pong !! назад, но приложение ничего не делает, когда я нажимаю кнопку входа в систему, почему?






Этот IP-адрес выглядит как общедоступный IP-адрес, у вас, вероятно, нет правильных правил в вашем брандмауэре / маршрутизаторе, чтобы разрешить внешний доступ.
Если ваше приложение работает в эмуляторе, вы можете использовать 10.0.2.2 вместо localhost для доступа к своей главной машине.
В противном случае, если вы работаете на устройстве в той же сети, что и ваш хост-компьютер, используйте локальный IP-адрес. Часто они находятся в диапазонах 192.168.x.x или 10.x.x.x.
Кроме того, вы не должны использовать HttpClient в операторе using, например:
using (var client = new HttpClient())
Его следует рассматривать как общий ресурс для каждого экземпляра приложения. В противном случае вы столкнетесь с утечкой TCP-сокетов, что может привести к тому, что вы не сможете делать новые запросы.
вы прошли через свой код в отладчике, чтобы проверить, что на самом деле происходит?