Tampak bagi saya bahwa sebagian besar dari apa yang dapat dicapai dengan HttpWebRequest/Response
juga dapat dicapai dengan WebClient
kelas. Saya membaca di suatu tempat yang WebClient
merupakan pembungkus tingkat tinggi untuk WebRequest/Response
.
Sejauh ini, saya tidak bisa melihat apa pun yang dapat diselesaikan dengan HttpWebRequest/Response
yang tidak dapat dicapai dengan WebClient
, atau di mana HttpWebRequest / Response akan memberi Anda lebih banyak kontrol "halus".
Kapan saya harus menggunakan WebClient dan kapan HttpWebRequest/Response
? (Jelas, HttpWebRequest/Response
adalah HTTP spesifik.)
Jika HttpWebRequest/Response
levelnya lebih rendah WebClient
, apa yang bisa saya capai dengan HttpWebRequest/Response
yang tidak bisa saya capai WebClient
?
base.GetWebRequest
untuk membuatnya dan kemudian menyesuaikan apa yang Anda inginkanHttpWebRequest
memperlihatkan lebih banyak hal yang memungkinkan Anda mengontrol protokol berbutir halus, misalnya: apakah Anda ingin menggunakan Keep-Alive, kumpulan koneksi apa yang digunakan, apakah buffer menulis atau tidak, dll.WebClient
tidak mengekspos semua itu (meskipun Anda dapat subkelas dariWebClient
dan mendapatkan akses ke objek Permintaan yang mendasarinya).WebClient
berguna untuk situasi di mana Anda hanya ingin melakukan operasi (misalnya: POST / GET / Form upload) dan tidak dapat diganggu untuk membuat dan mengelolaHttpWebRequest
,RequestStream
,HttpWebResponse
, dan aliran respons.sumber
Dari blog Tim Heuer - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
Sebaliknya di Silverlight Anda ingin menggunakan WebClient atau HttpWebRequest. Apa bedanya? Inilah versi timheuer. WebClient adalah implementasi sederhana yang melakukan permintaan GET dengan sangat mudah dan mendapatkan aliran respons. HttpWebRequest sangat bagus untuk ketika Anda memerlukan sedikit kontrol granular atas permintaan, perlu mengirim header atau penyesuaian lainnya.
sumber
Kelas WebClient berjalan pada utas antarmuka pengguna, sehingga antarmuka pengguna tidak responsif saat data sedang diunduh dari Internet. Di sisi lain, kelas HttpWebRequest tidak memblokir utas antarmuka pengguna, dan aplikasi Anda responsif. Jadi, di aplikasi tempat sejumlah besar data harus diunduh dari Internet atau jika sumber data lambat diakses, Anda harus menggunakan kelas HttpWebRequest; dalam semua kasus lain, Anda harus menggunakan kelas WebClient.
sumber
Kelemahan lain dari
WebClient
itu mengabaikan HTTPContentType
'scharset
nilai ketika Anda menggunakannya untuk mendapatkan teks respon. Anda harus mengatur penyandian melaluiEncoding
properti secara eksplisit .sumber
Encoding
- Anda tidak dapat mengetahui pengkodean sampai setelah permintaan, sehingga api WebClient membuatnya sangat tidak mungkin Anda akan dapat mengunduh string dengan benar dalam pengkodean yang tidak dikenal.Satu hal lagi HttpWebrquest memungkinkan Anda melakukan kompresi tetapi ia kelas Net.WebClient tidak mendukung kompresi HTTP
sumber
GetWebRequest
. Dalam hal ini, Anda cukup mengubahHttpWebRequest.AutomaticDecompressiong
properti yang mendasarinya )."HtttpWebRequest" sudah usang di .NET 4.5. Sekarang, kelas ini hanya internal.
sumber
WebRequest
sebagai gantinya.Satu contoh: Mem-posting data dan mendapatkan kembali data yang diproses dalam satu siklus permintaan / respons tampaknya tidak mungkin dilakukan dengan WebClient, tetapi Anda dapat melakukannya dengan HtttpWebRequest.
sumber