Http Get запрос не получает никаких данных

#c# #http #asp.net-web-api #https #xamarin.forms

#c# #http #asp.net-web-api #https #xamarin.forms

Вопрос:

У меня есть мой веб-Api на рабочем сервере в режиме онлайн, и он хорошо работает в postman и в формах Xamarin до тех пор, пока мне не понадобилось выполнить Get-запрос, и не возвращает никаких данных. Фактически он останавливается на GetAsStringAsync строке и не продолжается. Вместо этого он выскакивает из метода, а затем ничего больше.

Кто-нибудь знает, в чем может быть проблема? Я проверил и убедился, что мой Интернет работает и Uri тоже.

Здесь я выполняю свой Get в формах Xamarin:

 public async Task<List<OfferModel>> AllOffers()
{
    var httpclient = new HttpClient();
    httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", Settings.AccessToken);
    //it does not continue after this line, it jumps out of the method instead
    var response = await httpclient.GetStringAsync(UrlConstants.offerurl);
    var data =JsonConvert.DeserializeObject<List<OfferModel(response);
    return data;
}
  

Комментарии:

1. есть ли какие-либо исключения или другие сообщения об ошибках? Я не вижу закрытия > в ваших данных var = …. строка. это просто опечатка или они отсутствуют?

2. вы уверены, что URL работает с устройства / эмулятора? Тестирование с вашего рабочего стола не означает, что оно доступно из вашего мобильного приложения.

3. @Jason URL-адрес postman работает хорошо, и он доступен с устройства. Не пробовал это в эмуляторе из-за проблем с Wi-Fi.

4. @Sean закрытие > было опечаткой. Сообщений об ошибках нет, он просто покидает метод, а затем ничего не происходит.

5. Поведение, которое вы описываете, заключается в том, что ожидание никогда не возвращается. Если возможно, установите точку останова на другом конце и посмотрите, достигает ли ваш вызов удаленного сервера.

Ответ №1:

Решение 1

Можете ли вы попробовать получить доступ к задаче через awaiter, это может быть ожидание результата при ответе

     public class HttpHelperService
    {
                public async Task<List<OfferModel>> AllOffers()
                {
                    List<OfferModel> resu<
                    string responseBody;
                    using (HttpClient client = new HttpClient())
                    {
                        try
                        {
                            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", Settings.AccessToken);
                            HttpResponseMessage response = client.GetStringAsync(new Uri(UrlConstants.offerurl)).GetAwaiter().GetResult();
                            result = JsonConvert.DeserializeObject<List<OfferModel>>(response);
                        }
                        catch (Exception ex)
                        {
                            result = null;
                        }
                        return resu<
                    }
                }
        }
  

Решение 2

 public class MyPage : ContentPage
{
//Here is your page constructor
    public MyPage()
    {
       GetServices(); //--> call here without awaiter
    }
}

//Here is your awaiter method
    private async void GetServices()
    {
       LoadingPopupService.Show();
       var result = await HttpService.AllOffers();
        LoadingPopupService.Hide();
    }

//Here is your service.
    public async Task<List<OfferModel>> AllOffers()
    {
        var httpclient = new HttpClient();
        httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", Settings.AccessToken);
        var response = await httpclient.GetStringAsync(UrlConstants.offerurl);
        var data =JsonConvert.DeserializeObject<List<OfferModel(response);
        return data;
    }  
  

Комментарии:

1. Спасибо. Я внесу эти изменения в свой код, посмотрю, работает ли это, и оставлю вам отзыв.

2. Мое решение заключалось в этой проблеме: 1. Основной метод получения данных из сервисов. 2. Метод ожидания для асинхронного получения данных путем показа загрузчика пользователю. 3. Конструктор страницы. Вы можете вызвать непосредственно 2. метод в конструкторе без await. Это будет ожидание получения данных.

3. Okay Batuhan. Я вижу их, и я проверю их и попробую

4. Если ваш вопрос был завершен с ответом вверх, вы можете пометить мой ответ как завершенный.