Исключение HttpClient.SendRequest - PullRequest
0 голосов
/ 26 июня 2018

Я использую Xamarin.Forms и запускаю приложение на Android-симуляторе и на своем мобильном устройстве

Когда я пытаюсь отправить HttpRequestMessage, мое приложение выключается. Это происходит в методе SendRequest, но иногда я получаю Ошибка при отправке запроса

Я также создал консольное приложение, проверил запрос там и все работает, но Android нет.

public async Task<TResult> PostAsync<TResult>(string uri, IRequestData data, string token = "", string header = "")
        {
            var request = new HttpRequestMessage(HttpMethod.Post, uri);
            request.AddAuthoriationHeader(token);

            var content = data.ToJson();
            request.SetContent(content, ContentTypes.Json);

            var response =  await SendRequestAsync(request);
            var result = await HandleResponseAsync<TResult>(response);

            return result;
        }

public static void SetContent(this HttpRequestMessage request,
            string content,
            ContentTypes contentType)
        {
            request.Content = new StringContent(content,
                Encoding.UTF8,
                contentType.Value());
        }

public static string Value(this ContentTypes contentType)
        {
            switch (contentType)
            {
                case ContentTypes.XxxForm:
                    return "application/x-www-form-urlencoded";
                case ContentTypes.Json:
                    return "application/json";
                default:
                    throw new ArgumentOutOfRangeException(nameof(contentType), contentType, null);
            }
        }

private async Task<HttpResponseMessage> SendRequestAsync(HttpRequestMessage request)
            {
                try
                {
                    using (var client = new HttpClient())
                    {
                        return await client.SendAsync(request); // Shut down on this line
                    }
                }
                catch (ArgumentNullException e)
                {
                    Console.WriteLine(e.Message);
                    throw;
                }
                catch (InvalidOperationException e)
                {
                    Console.WriteLine(e.Message);
                    throw;
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine(e.Message);
                    throw;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    throw;
                }
            }

Что это может быть и почему работает преобразование в консоли на локальный хост, но с ошибкой телефона и эмулятора?

1 Ответ

0 голосов
/ 26 июня 2018

Вы действительно используете localhost в адресе?

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

При запуске из приложения устройство (даже эмулированное) будет localhost, а серверное приложение не будет запущено на этом устройстве или эмуляторе. Если вы хотите выполнить тестирование с устройства или эмулятора, найдите IP-адрес вашего компьютера для разработки (или любого другого компьютера, на котором запущено ваше серверное приложение) и используйте его в качестве адреса. Этот адрес, вероятно, будет выглядеть примерно так: 192.168.x.x или 10.x.x.x.

В зависимости от того, используете ли вы Windows или Mac, откройте окно консоли и введите ipconfig для Windows и ifconfig для Mac. Вы должны быть в состоянии получить свой IP-адрес оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...