我正在用Xamarin和C#進行一些移動開發。我正在爲Android應用程序構建一個簡單的登錄屏幕,我使用HttpClient
來進行實際的通話,但我堅持一些細節以使其正常工作。通過使用C#和HttpClient調用REST API來檢索JSON內容
我已經建立了一個簡單的Client
類,它代表了我的API客戶端:
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
namespace Acme.Api
{
public class Session
{
public string Token;
public int Timeout;
}
public class Client
{
public async Task<string> authenticate(string username, string password)
{
using (var client = new HttpClient())
{
string content = null;
client.BaseAddress = new Uri ("https://example.com/api/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add (new MediaTypeWithQualityHeaderValue ("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("Basic", string.Format ("{0}:{1}", username, password));
HttpResponseMessage response = await client.PostAsync ("auth", null);
content = await response.Content.ReadAsStringAsync();
return content;
}
}
}
}
正如你所看到的,authenticate
方法使用POST
在服務器上創建一個新的會話。 /auth
端點返回帶有令牌和超時值的JSON blob。
這是怎麼authenticate
方法被稱爲:
Client myClient = new Client();
Task<string> contentTask = myClient.authenticate(username, password);
var content = contentTask.ToString();
Console.Out.WriteLine(content);
我content
從不輸出任何東西。我顯然(毫無疑問)在做各種不對的事情。
我該如何讓我的authenticate
方法返回JSON字符串我期望的?
我一直在使用這些來源中尋找靈感:
http://developer.xamarin.com/guides/cross-platform/advanced/async_support_overview/ http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client
是不是'await'已經在'authenticate'方法內部使用過了嗎?另外,將'await'放在'authenticate'方法的前面似乎是Xamarin IDE中的語法錯誤(錯誤出現在我似乎無法複製的工具提示中)。 – Luke