Xamarin подключиться к Web Api - PullRequest
       30

Xamarin подключиться к Web Api

0 голосов
/ 16 октября 2018

Я новичок в использовании 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://localhost:44309/api/ping Я получаю сообщение Понг !!назад, но приложение ничего не делает, когда я нажимаю логин, почему?

1 Ответ

0 голосов
/ 16 октября 2018

Этот IP выглядит как публичный IP, у вас, вероятно, нет правильных правил в брандмауэре / маршрутизаторе, чтобы разрешить внешний доступ.

Если ваше приложение работает в эмуляторе, вы можете использовать 10.0.2.2 вместо localhost для доступа к хост-компьютеру.

В противном случае, если вы работаете на устройстве в той же сети, что ихост-компьютер, затем используйте локальный IP-адрес.Часто они находятся в диапазонах 192.168.x.x или 10.x.x.x.

Кроме того, вы не должны использовать HttpClient в выражении using, например:

using (var client = new HttpClient())

Это следует учитыватькак общий ресурс для экземпляра приложения.В противном случае вы столкнетесь с утечкой сокетов TCP, что может привести к невозможности делать новые запросы.

...