Xamarin Forms HttpClient PostAsync не возвращает ответ - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь получить ответ API, передавая URL-адрес службы и параметр json. URL и параметр правильно передаются в функцию requestAPI , но не дают ответа от метода PostAsync . Url - это местоположение API, а параметр - ID категории. Когда я использую тот же API в браузере, он дает правильный ответ. Но не в приложении.

Это функция requestAPI .

public async Task<ResponseObject> requestAPI(string urlString, string jsonParameters)
        {
            await Task.Delay(2000); // NOTE: just to simulate a HTTP request over the wire

            try
            {
                var json = JsonConvert.SerializeObject(jsonParameters);
                HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");

                HttpResponseMessage response = null;

                if (true)       // no issue here.
                {                                                    
                    response = await client.PostAsync(urlString, httpContent);
                }
                else
                {
                    response = await client.PutAsync(urlString, httpContent);
                }

                if (response.IsSuccessStatusCode)
                {
                    Debug.WriteLine(@"              TodoItem successfully saved.");
                    var returnVal = await response.Content.ReadAsStringAsync();
                    return new ResponseObject{
                        jsonString = returnVal,
                        isSuccess = true,
                        error = null
                    };
                }
                else
                {
                    return new ResponseObject
                    {
                        jsonString = null,
                        isSuccess = false,
                        error = null
                    };
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(@"              ERROR {0}", ex.Message);
                return new ResponseObject
                {
                    jsonString = null,

                    isSuccess = false,
                    error = null
                };
            }
        }

Категория Id происходит от этого метода.

private async void loadBookList(string categoryId)
        {
            IsBusy = true;

            if (CrossConnectivity.Current.IsConnected)
            {
                ResponseObject responseObject = await _apiService.requestAPI("http://192.168.0.35/kiyawamu-api/index.php/rest/V1/mobileappintegration/getbookdetailsbycategory", Convert.ToString(categoryId));

                if (responseObject.isSuccess)
                {
                    var jsonObject = JsonConvert.DeserializeObject<BookListJsonObject>(responseObject.jsonString);
                    CategoryBooks = new ObservableCollection<Book>(jsonObject.booksByCategory);
                }
                else
                {
                    giveAlertForCommonError();
                }
            }
        }

Я пробовал следующие решения, но не работает.

  1. URL-адрес, используемый в качестве URI var uri = new Uri(urlString);
  2. jsonParameter также используется в качестве строки
  3. GetAsync также используется

Любая помощь по этому вопросу будет принята с благодарностью.

1 Ответ

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

Если вы работаете на Android и код написан на PCL, попробуйте добавить ModernHttpClient, чтобы вы могли использовать собственный HttpClientHandler.

https://github.com/paulcbetts/ModernHttpClient

Но я также рекомендую всем перейти с PCL на стандарт .NET. Если вы делаете это, вам не нужно устанавливать пакет NuGet для использования HttpCliennt. И тогда вы можете выбрать реализацию HttpClientHandler в настройках проекта.

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