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 usingiki ö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
WebRequestSoyut 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 - HttpWebRequestve FileWebRequest.
İçin WebRequestbir örnek oluşturmak için Create yöntemini kullanırsınız WebRequest. GetResponseStreamdöner data stream.
Orada da FileWebRequestve FtpWebRequestsınıflar olduğu inheritgelen WebRequest. Normalde, kullanmak istiyorsunuz WebRequest, iyi, istekte bulunur ve ya dönüş dönüştürmek HttpWebRequest, FileWebRequestya 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
WebClienttarafından tanımlanan bir kaynağa ortak işlemler sendingve receivingveriler sağlar URI. Basitçe, bu üst düzey bir soyutlamadır HttpWebRequest. Bu 'ortak operasyonları' ayırt budur WebClientden HttpWebRequestaşağıda örnekte gösterildiği gibi,:
Misal:
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
Ayrıca örnek DownloadDatave DownloadFileoperasyonlar 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.DownloadStringdikkate 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.