public WorkItem CreateWorkItem(string title, string description, string comments)
{
HttpClient client = new HttpClient();
//var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null).Result.Content;
//var task = await client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title=" + title + "&description=" + description + "&history=" + comments, null);
var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title=" +title+"&description="+description+"&history="+ comments, null).Result;
var result = response.Content.ReadAsStringAsync().Result;
var workItem = JsonConvert.DeserializeObject<WorkItem>(result);
return workItem;
}
2 jawaban
Anda melihat bahwa itu adalah "PostAsync" artinya ia mengembalikan Task<HttpWebResponse>
sehingga Anda harus await
atau memblokirnya sampai Anda mendapatkan hasil (.Result
)
var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null).Result;
Atau
var response = await client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null);
Kemudian menggunakan NewstonSoft.Json
var workItem = JsonConvert.Deserialize<WorkItem>(contents);
client.PostAsync()
Adalah metode asinkron dan hanya akan mengembalikan tugas bukan hasilnya. Jika Anda ingin mendapatkan hasilnya kembali maka Anda perlu menunggu respon dari API. menggunakan
var response = await client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null)
var workItem = JsonConvert.Deserialize<WorkItem>(response.Content);
Ini adalah bagaimana kita dapat mengakses data. Tetapi untuk mencapai ini metode Anda harus ditandai sebagai 'async', maka hanya Anda yang dapat menggunakan kata kunci 'menunggu'. Metode lain adalah,
var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem").Result.Content
var workItem = JsonConvert.Deserialize<WorkItem>(response);
Tetapi ini bukan praktik yang baik untuk menggunakan hasil pada metode yang dapat ditunggu. Karena kami tidak dapat memanfaatkan asinkronisitas fitur tersebut.
Jika tidak,
var task = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem");
task.wait();
var workItem = JsonConvert.Deserialize<WorkItem>(task.Result.Content);
Ini juga bukan pendekatan yang baik. Ini semua opsi yang Anda miliki jika Anda tidak menggunakan fungsi 'async'.
public WorkItem CreateWorkItem(string title, string description, string comments)
{
HttpClient client = new HttpClient();
var task = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null);
task.Wait();
var contents = task.Result.Content;
}
.Result
.