WebClient ist eine übergeordnete Abstraktion, die auf HttpWebRequest aufbaut, um die häufigsten Aufgaben zu vereinfachen. Wenn Sie beispielsweise den Inhalt aus einer HttpWebResponse herausholen möchten, müssen Sie aus dem Antwortstrom lesen:
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();
Mit WebClient tun Sie einfach DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
Hinweis: Der using
Kürze halber habe ich die Aussagen aus beiden Beispielen weggelassen. Sie sollten auf jeden Fall darauf achten, dass Ihre Webanforderungsobjekte ordnungsgemäß entsorgt werden.
Im Allgemeinen eignet sich WebClient für schnelle und schmutzige einfache Anforderungen, und HttpWebRequest eignet sich, wenn Sie mehr Kontrolle über die gesamte Anforderung benötigen.
ServicePointManager.Expect100Continue = false
, macht andere nicht standardmäßige Dinge und hat viele Macken und Eigenheiten. Ich habe RestSharp gestartet, um diese Probleme zu beheben.HttpClient
darauf stößt, wie ich es geradeusing (WebClient client = new WebClient())
Auch WebClient hat keine Timeout-Eigenschaft. Und das ist das Problem, denn der Standardwert beträgt 100 Sekunden und das ist zu viel, um anzuzeigen, ob keine Internetverbindung besteht.
Problemumgehung für dieses Problem finden Sie hier https://stackoverflow.com/a/3052637/1303422
quelle
Ich weiß, dass es zu lang ist, um zu antworten, aber nur als Informationszweck für zukünftige Leser:
WebRequest
Das
WebRequest
ist eine abstrakte Basisklasse. Sie verwenden es also nicht direkt. Sie verwenden es durch abgeleitete Klassen -HttpWebRequest
undFileWebRequest
.Sie verwenden die Create-Methode von
WebRequest
, um eine Instanz von zu erstellenWebRequest
.GetResponseStream
kehrt zurückdata stream
.Es gibt auch
FileWebRequest
undFtpWebRequest
Klassen, dieinherit
vonWebRequest
. Normalerweise würden Sie verwenden ,WebRequest
um, na ja, eine Anfrage und die Rückkehr zu entweder konvertierenHttpWebRequest
,FileWebRequest
oderFtpWebRequest
abhängig von Ihrer Anfrage . Unten ist ein Beispiel:Beispiel:
WebClient
WebClient
stellt allgemeine Vorgänge fürsending
undreceiving
Daten von einer Ressource bereit, die durch a gekennzeichnet istURI
. Es ist einfach eine übergeordnete Abstraktion vonHttpWebRequest
. Diese "gemeinsamen Operationen" unterscheiden sichWebClient
von denenHttpWebRequest
, wie auch im folgenden Beispiel gezeigt:Beispiel:
Es gibt auch
DownloadData
undDownloadFile
Operationen unterWebClient
Instanz. Diese allgemeinen Operationen vereinfachen auch den Code dessen, was wir normalerweise tun würdenHttpWebRequest
. MitHttpWebRequest
müssen wir die Antwort auf unsere Anfrage erhalten, instanziierenStreamReader
, um die Antwort zu lesen, und schließlich das Ergebnis in den von uns erwarteten Typ konvertieren. MitWebClient
rufen wir einfach anDownloadData, DownloadFile or DownloadString
.Beachten Sie jedoch, dass
WebClient.DownloadString
dieencoding
von Ihnen angeforderte Ressource nicht berücksichtigt wird . Sie würden also wahrscheinlich seltsame Zeichen erhalten, wenn Sie nicht angeben und codieren.HINWEIS: Grundsätzlich " WebClient benötigt im Vergleich zu Webrequest nur wenige Codezeilen "
quelle
webClient.UploadData(url, "POST", bytes)
die Methode angeben (siehe MSDN-Dokumente ).