Xamarin表单HttpClient GetAsync仅在iOS中失败

时间:2016-11-25 22:49:06

标签: xamarin xamarin.forms

我有一个非常简单的REST查询到我们的WebAPI后端(由许多应用程序使用),它在Android和Windows下工作正常,但在iOS中,它失败了“对象引用没有设置为对象的实例”错误。在下面的代码中,moHttpClient和loUri都被实例化。我已经尝试在Device.BeginInvokeOnMainThread中包含对GetEmployeeRecord的调用,但这也无济于事。我已经在Visual Studio和Mac上升级到Xamarin的最新稳定版本。为什么它在其他操作系统中工作,而不是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

我刚检查过,看起来这个Unknown会员也出现在Android上。但是使用Android它实际上会执行。

1 个答案:

答案 0 :(得分:3)

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