我无法弄清楚为什么我的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());
}
}
}
答案 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