2016-11-25 64 views
0

我对我们的WebAPI后端(由许多应用程序使用)有一个非常简单的REST查询,它在Android和Windows下工作正常,但在iOS中,它失败并显示“Object reference not设置为一个对象的实例“错误。在下面的代码中,moHttpClient和loUri都被实例化了。我试过在Device.BeginInvokeOnMainThread中打包调用GetEmployeeRecord,但这也没有帮助。我已经在Visual Studio和Mac上升级到Xamarin的最新稳定版本。为什么它在其他操作系统中工作,但不是iOS?Xamarin表单HttpClient GetAsync在iOS中失败

private async void btnTest_Clicked(object sender, EventArgs e) 
    { 
     await GetEmployeeRecord(); 
    } 

    private async Task GetEmployeeRecord() 
    { 
     try 
     { 
      var loUri = new Uri("https://my.website.com/mobile.webapp/api/employees?key=6c6f2c06-a444-4e54-bd77-b5f594c29910"); 
      var loResponse = await moHttpClient.GetAsync(loUri); 
      if (loResponse.IsSuccessStatusCode) 
      { 
       var lcJson = await loResponse.Content.ReadAsStringAsync(); 
       await DisplayAlert("Employee", lcJson, "OK"); 
      } 
     } 
     catch (Exception ex) 
     { 
      Device.BeginInvokeOnMainThread(() => 
      { 
       DisplayAlert("Get Employee Record", ex.Message, "OK"); 
      }); 
     } 
    } 

在GetAsync行使用断点,moHttpClient和loUri都被实例化。但是,在GetAsync上进行鼠标移动会提示GetAsync是未知成员。怎么可能? Mouse over GetAsync

我刚刚检查,似乎这个未知的成员与Android也发生。但是使用Android它实际上执行。

+0

我在您提供的URI上获得404。什么是moHttpClient?你的网站也有自己的证书,这也可能是问题。如果你想要我们测试,请提供正确的URI –

+0

这不是我的网站,我只是为了掩盖实际地址,出于安全原因。 URI没有问题,它适用于Android和Windows。我怀疑我需要以某种方式在iOS项目中设置一些东西来允许网络/互联网访问。代码在PCL中。 –

+0

然后在你的异常上放置断点并检查什么对象为空。如果我不能运行它,看看什么是空的,我不能帮助更多 –

回答

3

为了让http查询适用于iOS,我必须在运行代码的PCL项目中安装NuGet包Microsoft.Net.Http。