Client.GetAsync返回null

时间:2015-03-11 22:24:18

标签: c# async-await xamarin.forms

我无法弄清楚为什么我的await client.GetAsync在尝试从我的web api控制器获取数据时返回null。我成功点击了控制器方法,但之后我的移动PCL方法退出了我的客户端.GetAsync line。我错过了什么吗?这是我的移动方法:

public async void onLoginClicked(object sender, EventArgs e)
    {
        var url = BaseUrl + "/loginapi/login?username=" + eUserName.Text + "&password=" + ePassword.Text;

        var client = new HttpClient() { BaseAddress = new Uri(url) };

        client.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json"));

        var jsonResponse = string.Empty;
        try
        {
            using (client)
            {
                var getDataResponse = await client.GetAsync("", HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);

                //If we do not get a successful status code, then return an empty set
                if (!getDataResponse.IsSuccessStatusCode)
                    jsonResponse = null;

                //Retrieve the JSON response
                jsonResponse = await getDataResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
                if (jsonResponse != null)
                {
                    //map object

                    await Navigation.PushAsync(new CalendarView());
                }

            }

    }

2 个答案:

答案 0 :(得分:1)

您不应该使用async void(请参阅https://msdn.microsoft.com/en-us/magazine/jj991977.aspx文章以获得更全面的解释 - 尤其是在异常语义方面)。

我的建议是将您的方法签名更改为以下内容:

public async Task onLoginClicked(object sender, EventArgs e)

然后,您将能够在try / catch中包装await语句,以查找抛出的任何异常。

答案 1 :(得分:0)

尝试将PCL类的System.Net.Http引用的“Copy Local”属性设置为false,并将System.Net.Http引用添加到android和iOS项目中。 显然,System.Net.Http引用在PCL中意外地表现。有关此主题的更多信息 https://forums.xamarin.com/discussion/7719/using-httpclient