2017-02-19 56 views
1

我使用Xamarin形式为使用来自Netflix的REST API,但我在弹出得到这个问题: 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); 

他停在那里,网址recive网址+演员的名字,但在下一行响应保留为空。

PS:我将互联网许可给我的应用程序在清单!

+1

NameResolutionFailure通常意味着一个DNS问题。您是否验证过您可以从设备的浏览器加载该网站? – Jason

+1

当URL失败时,检查浏览器中的URL。有时它会站在你身边。在编码中添加错误的更多原因 – user7568042

+0

在android模拟器中,我获得了很多,有时网络桥接器不能正常工作。 –

回答

0

nuget包:Microsoft 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)没有工作,尝试的foreach。

+1

当给出答案时,最好给出[一些解释为什么你的答案](http://stackoverflow.com/help/how-to-answer)是一个答案。 –

+0

对不起,我是新来的,下次我会做得更好。 –

+1

你现在确实可以做得更好。在你的帖子的左下方是一个'edit'链接。不要害怕编辑来改善这里的事物。干杯。 –

0

为什么不能尝试改装? 改装是通过广场的改造图书馆大量的启发库,并把你的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是否正确使用邮递员/浏览器。