Saya mencoba untuk mendapatkan konten dari HttpResponseMessage. Seharusnya:, {"message":"Action '' does not exist!","success":false}
tapi saya tidak tahu, bagaimana cara mengeluarkannya dari HttpResponseMessage.
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("http://****?action=");
txtBlock.Text = Convert.ToString(response); //wrong!
Dalam hal ini txtBlock akan memiliki nilai:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Date: Wed, 10 Apr 2013 20:46:37 GMT
Server: Apache/2.2.16
Server: (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze14
Content-Length: 55
Content-Type: text/html
}
Content
properti sebagai gantinya. Lihat contoh di sini . Gulir ke bawah ke langkah kedua.HttpClient
, bukanHttpWebRequest
/HttpWebResponse
.Saya pikir pendekatan termudah adalah mengubah baris terakhir
Dengan cara ini Anda tidak perlu memperkenalkan pembaca aliran apa pun dan Anda tidak memerlukan metode ekstensi apa pun.
sumber
Coba ini, Anda dapat membuat metode ekstensi seperti ini:
dan kemudian, panggil metode ekstensi dengan mudah:
Saya harap ini membantu Anda ;-)
sumber
await
sebagai ganti.Result
... atau gunakan klien HTTP yang sinkron sebagai gantinya, jika kode Anda tidak dapat menangani pemrograman async. Tetapi kode modern apa pun harus, jika tidak, itu mungkin pertanda aplikasi Anda melakukan sesuatu yang salah.Jika Anda ingin melemparkannya ke jenis tertentu (misalnya dalam tes), Anda dapat menggunakan metode ekstensi ReadAsAsync :
atau mengikuti kode sinkron:
Pembaruan: ada juga opsi generik dari ReadAsAsync <> yang mengembalikan instance tipe spesifik alih-alih yang dideklarasikan objek:
sumber
Dengan jawaban rudivonstaden
tetapi jika Anda tidak ingin membuat metode async Anda dapat menggunakan
Tunggu () itu penting, karena kita sedang melakukan operasi async dan kita harus menunggu tugas selesai sebelum melanjutkan.
sumber
.Result
berbeda ?,httpContent.ReadAsStringAsync().Result
.Result
akan memblokir eksekusi utas pada baris itu ... di mana sebagaitxtBlock.Text.Wait()
blok pada panggilan wait () ... jadi Anda benar bahwa pada dasarnya tidak ada perbedaan. Tapi saya mendugatxtBlock.Text.Wait()
akan mengambil parameter integer opsional sehingga GUI tidak hang jikaReadAsStringAsync()
panggilan sebelumnya tidak pernah kembali. Misalnya, yang berikut ini akan diblokir tidak lebih dari 1 detiktxtBlock.Text.Wait(1000)
Jawaban cepat yang saya sarankan adalah:
response.Result.Content.ReadAsStringAsync().Result
sumber
Result
tugas. Anda berisiko mengunci aplikasi Anda. Gunakan async / tunggu saja.ReadAsStringAsync()
tidak kembali, jadi pastikan untuk tidak menyebutnya di GUI atau utas aplikasi utama Anda.Saya pikir gambar berikut ini membantu bagi mereka yang perlu datang
T
sebagai tipe pengembalian.sumber
Anda dapat menggunakan
GetStringAsync
metode ini:sumber