Yanıtlar:
WebClient, en yaygın görevleri basitleştirmek için HttpWebRequest üzerine inşa edilmiş üst düzey bir soyutlamadır. Örneğin, içeriği bir HttpWebResponse'den çıkarmak istiyorsanız, yanıt akışından okumalısınız:
var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
WebClient ile şunları yapabilirsiniz DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
Not: Her using
iki örnekten de ifadeleri kısalık için bıraktım . Kesinlikle web istek nesnelerinizi uygun şekilde atmaya dikkat etmelisiniz.
Genel olarak, WebClient hızlı ve kirli basit istekler için iyidir ve HttpWebRequest tüm istek üzerinde daha fazla kontrole ihtiyacınız olduğunda iyidir.
HttpClient
, .NET 4.5 ile gelen ve yukarıdaki sorunlardan bazılarını çözebilecek (ya da olmayabilir?)
using (WebClient client = new WebClient())
Ayrıca WebClient'in zaman aşımı özelliği yoktur. Sorun da bu, çünkü varsayılan değer 100 saniye ve İnternet bağlantısı olup olmadığını belirtmek için çok fazla.
Bu sorun için geçici çözüm burada https://stackoverflow.com/a/3052637/1303422
Yanıtlamak için çok uzun zaman olduğunu biliyorum, ancak gelecekteki okuyucular için bir bilgi amacı olarak:
WebRequest
System.Object
System.MarshalByRefObject
System.Net.WebRequest
WebRequest
Soyut temel sınıftır. Yani aslında doğrudan kullanmıyorsunuz. Onu türetilmiş sınıflar aracılığıyla kullanırsınız - HttpWebRequest
ve FileWebRequest
.
İçin WebRequest
bir örnek oluşturmak için Create yöntemini kullanırsınız WebRequest
. GetResponseStream
döner data stream
.
Orada da FileWebRequest
ve FtpWebRequest
sınıflar olduğu inherit
gelen WebRequest
. Normalde, kullanmak istiyorsunuz WebRequest
, iyi, istekte bulunur ve ya dönüş dönüştürmek HttpWebRequest
, FileWebRequest
ya da FtpWebRequest
, isteğinize bağlıdır. Aşağıda bir örnek verilmiştir:
Misal:
var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();
WebClient
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
WebClient
tarafından tanımlanan bir kaynağa ortak işlemler sending
ve receiving
veriler sağlar URI
. Basitçe, bu üst düzey bir soyutlamadır HttpWebRequest
. Bu 'ortak operasyonları' ayırt budur WebClient
den HttpWebRequest
aşağıda örnekte gösterildiği gibi,:
Misal:
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
Ayrıca örnek DownloadData
ve DownloadFile
operasyonlar vardır WebClient
. Bu yaygın işlemler, normalde ne yapacağımızın kodunu da basitleştirir HttpWebRequest
. Kullanarak HttpWebRequest
, talebimizin cevabını almalı StreamReader
, yanıtı okumak için anında sonuç vermeli ve son olarak sonucu beklediğimiz tipe dönüştürmeliyiz. İle WebClient
, sadece ararız DownloadData, DownloadFile or DownloadString
.
Ancak, talep ettiğiniz kaynağın WebClient.DownloadString
dikkate alınmadığını unutmayın encoding
. Yani, belirtmezseniz ve kodlamazsanız, muhtemelen garip karakterler alırsınız.
NOT: Temel olarak " WebClient , Web isteğine kıyasla birkaç satır kod alır "
webClient.UploadData(url, "POST", bytes)
Yöntemi belirtmek için kullanabildim (bkz. MSDN belgeleri ).
ServicePointManager.Expect100Continue = false
, diğer standart dışı şeyler yapar ve birçok tuhaflığa ve kendine özgü ifadelere sahiptir. Bu sorunları düzeltmek için RestSharp'ı başlattım.