Es scheint mir, dass das meiste, was mit erreicht werden HttpWebRequest/Response
kann, auch mit der WebClient
Klasse erreicht werden kann. Ich habe irgendwo gelesen, für WebClient
was ein High-Level-Wrapper ist WebRequest/Response
.
Bisher kann ich nichts sehen, was mit HttpWebRequest/Response
dem nicht erreicht werden kann WebClient
, noch mit HttpWebRequest / Response, das Ihnen eine "feinkörnigere" Kontrolle gibt.
Wann und wann soll ich WebClient verwenden HttpWebRequest/Response
? (Offensichtlich HttpWebRequest/Response
sind HTTP-spezifisch.)
Wenn ich HttpWebRequest/Response
dann ein niedrigeres Level habe WebClient
, was kann ich damit erreichen, was HttpWebRequest/Response
ich nicht erreichen kann WebClient
?
base.GetWebRequest
, um sie zu erstellen und dann genau das anzupassen, was Sie wollenHttpWebRequest
macht viel mehr Dinge verfügbar, die Ihnen eine fein abgestimmte Protokollsteuerung ermöglichen, z. B.: ob Sie Keep-Alive verwenden möchten, welchen Verbindungspool Sie verwenden möchten, ob Schreibvorgänge gepuffert werden sollen oder nicht usw.WebClient
macht nicht alleWebClient
verfügbar (obwohl Sie eine Unterklasse von dem zugrunde liegenden Anforderungsobjekt erstellen und auf dieses zugreifen können).WebClient
ist für Situationen nützlich , wenn Sie nur eine Operation zu tun: (zB POST / GET / Form - Upload) und können nicht gestört werden , zu erstellen und zu verwalten , dieHttpWebRequest
,RequestStream
,HttpWebResponse
, und Antwortstream.quelle
Aus Tim Heuers Blog - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
Stattdessen möchten Sie in Silverlight WebClient oder HttpWebRequest verwenden. Was ist der Unterschied? Hier ist die Timheuer-Version. WebClient ist eine einfachere Implementierung, die GET-Anforderungen sehr einfach erledigt und einen Antwortstrom erhält. HttpWebRequest eignet sich hervorragend, wenn Sie eine etwas genauere Kontrolle über die Anforderung benötigen, Header oder andere Anpassungen senden müssen.
quelle
Die WebClient- Klasse wird auf dem Benutzeroberflächenthread ausgeführt, sodass die Benutzeroberfläche nicht reagiert , während Daten aus dem Internet heruntergeladen werden. Andererseits blockiert die HttpWebRequest- Klasse den Benutzeroberflächenthread nicht und Ihre Anwendung reagiert. In Apps, in denen eine große Datenmenge aus dem Internet heruntergeladen werden soll oder auf die nur langsam zugegriffen werden kann, sollten Sie die HttpWebRequest-Klasse verwenden. In allen anderen Fällen sollten Sie die WebClient-Klasse verwenden.
quelle
Ein weiterer Nachteil von
WebClient
ist, dass der HTTPContentType
-charset
Wert ignoriert wird , wenn Sie ihn zum Abrufen des Antworttextes verwenden. Sie müssen die Codierung explizit über dieEncoding
Eigenschaft festlegen .quelle
Encoding
- man kann nicht wissen , die Codierung erst nach der Anforderung, so dass der WebClient api macht es sehr unwahrscheinlich , dass Sie sind in der Lage sein , um richtig einen String in einer unbekannten Codierung herunterladen.Eine weitere Sache, mit der HttpWebrquest die Komprimierung ermöglicht, aber die Net.WebClient-Klasse unterstützt keine HTTP-Komprimierung
quelle
GetWebRequest
. In diesem Fall optimierenHttpWebRequest.AutomaticDecompressiong
Sie einfach die zugrunde liegende Eigenschaft .Die "HtttpWebRequest" ist in .NET 4.5 veraltet. Diese Klasse ist nur noch intern.
quelle
WebRequest
stattdessen.Ein Beispiel: Das Posten von Daten und das Zurückholen verarbeiteter Daten in einem Anforderungs- / Antwortzyklus scheint mit WebClient unmöglich zu sein, aber Sie können dies mit HtttpWebRequest tun.
quelle