Ошибка запроса веб-API в формах xamarin - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь разработать мобильное приложение, используя веб-интерфейсы asp.net и формы xamarin. Получение таких ошибок

System.Net.Http.HttpRequestException: при отправке произошла ошибка запрос

Я разработал все приложения Mobile, Web в одном решении. Затем создал веб-интерфейс с индивидуальным входом с использованием visual studio 2017. Это мой исходный код для модели RegisterBinding

RegisterBinding.cs

public class RegisterBindingModel
{
    public string Email { get; set; }

    public string Password { get; set; }

    public string ConfirmPassword { get; set; }
}

Затем я создал viewmodel для связывания xamarin. RegisterViewModel.cs

    class RegisterViewModel
    {
    ApiServices _apiserv = new ApiServices(); 
    public string Email { get; set; }
    public string Password { get; set; }
    public string ConfirmPassword { get; set; }
    public string Message { get; set; }

    public ICommand RegisterCommand {
        get
        {
            return new Command(async() =>
            {
                var isSucess = await _apiserv.RegisterAsync(Email, Password, ConfirmPassword);
                if (isSucess)
                {
                    Message = "Sucessfully Registered!";
                }
                else
                {
                    Message = "Try again";
                }
            });
        }
    }
}

Также я создаю apiservice для соединения мобильного приложения и сервиса web api

ApiService.cs

public async Task<bool> RegisterAsync(string email, string password, string confirmPassword)
        {
            try
            {
                var client = new HttpClient();

                var model = new RegisterBindingModel
                {
                    Email = email,
                    Password = password,
                    ConfirmPassword = confirmPassword
                };

                var json = JsonConvert.SerializeObject(model);

                HttpContent _content = new StringContent(json);

                _content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");


                var response = await client.PostAsync("http://localhost:54996/api/Account/Register", _content);
                return response.IsSuccessStatusCode;

            }
            catch (System.Exception)
            {

                throw;
            }


        }

Наконец, мой взгляд на xamarin xaml:

RegisterPage.cs

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="CIDSCONMOB.Views.RegisterPage"
            xmlns:vm="clr-namespace:CIDSCONMOB.ViewModels">

    <ContentPage.BindingContext>
        <vm:RegisterViewModel/>
    </ContentPage.BindingContext>

    <StackLayout Orientation="Vertical">
        <Entry Text="{Binding Email}"
               Placeholder="Email"/>
        <Entry Text="{Binding Password}"
               Placeholder="Password"
               IsPassword="True"/>
        <Entry Text="{Binding ConfirmPassword}"
               Placeholder="Confirm Password"
               IsPassword="True"/>
        <Button Command="{Binding RegisterCommand}"
                 Text="Sign Up"/>
        <Label Text="{Binding Message}"/>
    </StackLayout>

</ContentPage>  

Это ошибка, когда я нажимаю кнопку регистрации

Исключение HTTP

Поскольку я новичок в разработке xamarin, пожалуйста, помогите мне найти решение этой проблемы

1 Ответ

0 голосов
/ 04 мая 2018

Проблема, скорее всего, связана с адресом, который вы используете http://localhost:54996/api/Account/Register. Когда вы работаете на симуляторе или реальном устройстве, воспринимайте его как внешнюю машину. Таким образом, localhost будет указывать на этот симулятор / устройство.

Получите адрес компьютера, на котором запущено ваше серверное приложение, убедитесь, что он подключен к той же сети, что и симулятор / устройство, введите его в качестве адреса и повторите попытку.

Адрес, скорее всего, будет начинаться с 192.168.x.x или 10.x.x.x.

Кроме того, в InnerException, вероятно, есть больше деталей, лучше сначала проверить это.

...