我環顧四周,並關注瞭如何設置這些的教程,我沒有運氣。我正在使用Xamarin構建一個跨平臺的應用程序。我有一個可移植的類庫來處理我所有的業務邏輯和Web服務調用。使用httpclient並返回值無法正常工作的任務
我遇到的問題是當我在下面的方法中運行代碼而沒有問題時,但是如果我按照下面所示的方式運行它作爲一個任務需要很長時間。我相信它已經陷入僵局,但由於我對此很陌生,所以我不明白爲什麼。我希望我的Api調用位於PCL中,因此我可以在每個平臺之間共享它。
public async Task<LoginResponse> Login(string userName, string password)
{
HttpClient client = new HttpClient();
string baseUrl = "http://someURLhere/";
client.BaseAddress = new Uri(baseUrl);
string authData = string.Format("/IOSLogin?Username={0}&Password={1}&languageSettingOnDevice={2}", userName, password, "en");
var uri = new Uri(string.Format("{0}{1}", baseUrl, authData));
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
LoginResponse jsonResponse = JsonConvert.DeserializeObject<LoginResponse>(content);
jsonResponse.loginSuccesfull = true;
return jsonResponse;
}
else
{
return new LoginResponse() { loginSuccesfull = false };
}
}
在ios版本的項目中,在按鈕事件上,我使用此代碼運行上面顯示的任務。
Core.Service.AtmisService service = new Core.Service.AtmisService();
LoginResponse loginTask = service.Login(userName.Text, password.Text).Result;
我認爲,通過這種方式設置它,當我在調用任務的末尾使用.Result
將執行這一任務並返回結果。我添加了斷點,並且它進入登錄方法,並且達到這個var response = await client.GetAsync(uri);
,然後它什麼都不做。關於我做錯什麼的想法。感謝您的任何幫助。
謝謝您的明確解釋,現在變得更有意義。 –