2017-02-19 7 views
1

Я использую Xamarin формы потреблять REST Апи из NetFlix, но я получаю эту проблему в Popup: System.Net.WebException: Ошибка: NameResolutionFailureXamarin HttpClient

Почему о получаю эту ошибку?

Мой код:

private HttpClient client = new HttpClient(); 
    private List<Movie> movies; 

    public async Task<List<Movie>> LocalizaFilmesPorAtor(string ator) 
    { 

     if (string.IsNullOrWhiteSpace(ator)) 
     { 
      return null; 
     } 
     else 
     { 
      string url = string.Format("http://netflixroulette.net/api/api.php?actor={0}", ator); 
      var response = await client.GetAsync(url); 

      if (response.StatusCode == HttpStatusCode.NotFound) 
      { 
       movies = new List<Movie>(); 
      } else 
      { 

       var content = await response.Content.ReadAsStringAsync(); 
       var _movies = JsonConvert.DeserializeObject<List<Movie>>(content); 
       movies = new List<Movie>(_movies); 
      } 

      return movies; 
     } 
    } 

В режиме отладки сказал ошибка в этом коде

string url = string.Format("http://netflixroulette.net/api/api.php?actor={0}", ator); 
      var response = await client.GetAsync(url); 

Он останавливается там, гиперссылка Получать имя URL-адрес + актер, но в следующей строке ответа остается.

PS: Я предоставляю разрешение на использование Интернета в своем приложении в манифесте!

+1

NameResolutionFailure обычно означает проблему DNS. Вы подтвердили, что можете загрузить этот сайт из браузера устройства? – Jason

+1

Когда URL-адрес завершается с ошибкой, проверьте URL-адрес в браузере. иногда это на их стороне, чем ваша сторона. Больше причин добавлять ошибки в кодировку – user7568042

+0

В эмуляторе Android я получаю это много, иногда сетевой мост не подходит должным образом. –

ответ

0

nuget packages: Библиотеки клиентов HTTP HTTP и Newtonsoft.Json.

попробовать это:

private HttpClient client = new HttpClient(); 
private List<Movie> movies; 

public async Task<List<Movie>> LocalizaFilmesPorAtor(string ator) 
{ 

    if (string.IsNullOrWhiteSpace(ator)) 
    { 
     return null; 
    } 
    else 
    { 
    var client = new HttpClient(); 
    client.BaseAddress = new Uri("http://netflixroulette.net/"); 
    HttpResponseMessage response = client.GetAsync("api/api.php?actor={0}", ator); 
     if(response.IsSuccessStatusCode) 
     { 
     var json = response.Content.ReadAsStringAsync().Result; 
     var _movies = JsonConvert.DeserializeObject<List<Movie>>(json); 
     movies = new List<Movie>(_movies); 

     } 
     else 
     { 

      movies = new List<Movie>(); 
     } 

     return movies; 
    } 
} 

PS: если фильмы = новый список (_movies) не работает, попробуйте Еогеасп.

+1

Если вы даете ответ, желательно дать [некоторое объяснение, почему ваш ответ] (http://stackoverflow.com/help/how-to-answer). –

+0

Жаль, что я здесь новый, в следующий раз я сделаю лучше. –

+1

Теперь вы можете сделать лучше. Прямо ниже вашего сообщения на левой стороне находится ссылка «edit». Не стесняйтесь редактировать, чтобы улучшить ситуацию здесь. Приветствия. –

0

Почему вы не можете исправить? Заверните библиотека сильно вдохновлен библиотеки Retrofit Square, и это превращает ваш REST API в живой интерфейс

Что вам просто нужно сделать, это:

  1. Добавить Заверните от NuGet Пакет
  2. Создать интерфейс с любым именем
  3. Импорт Заверните (Использование Заверните)

здесь приведен пример кода для интерфейса

public interface ISampleName 
{ 

    [Get("api/api.php?actor={ator}")] 
    async Task<List<Movie>> LocalizaFilmesPorAtor(string ator); 
} 

После этого, вы можете назвать это так:

var SampleNameApi = RestService.For<ISampleName>("http://netflixroulette.net/"); 

var response= await SampleNameApi.LocalizaFilmesPorAtor("Sample"); 

Я считаю, что это поможет.

Для получения более подробной информации https://github.com/paulcbetts/refit

+0

Очень классный чувак, я попробую! –

0

Я имел этот вопрос тоже, потому что мой URL был поврежден. Дважды проверьте правильность URL-адреса в Postman/Browser.