Il me semble que la plupart de ce qui peut être accompli HttpWebRequest/Response
peut aussi être accompli avec la WebClient
classe. J'ai lu quelque part qui WebClient
est un wrapper de haut niveau pour WebRequest/Response
.
Jusqu'à présent, je ne vois rien qui puisse être accompli avec HttpWebRequest/Response
qui ne puisse pas être accompli avec WebClient
, ni où HttpWebRequest / Response vous donnera un contrôle plus "fin".
Quand dois-je utiliser WebClient et quand HttpWebRequest/Response
? (De toute évidence, HttpWebRequest/Response
sont spécifiques à HTTP.)
Si le HttpWebRequest/Response
niveau est inférieur WebClient
, que puis-je accomplir avec HttpWebRequest/Response
lequel je ne peux pas accomplir WebClient
?
base.GetWebRequest
pour la créer et ensuite personnaliser ce que vous voulezHttpWebRequest
expose beaucoup plus de choses qui vous permettent un contrôle précis du protocole, par exemple: si vous voulez utiliser Keep-Alive, quel pool de connexions utiliser, si vous souhaitez tamponner les écritures ou non, etc.WebClient
n'expose pas tous ceux-ci (bien que vous puissiez sousWebClient
-classer et accéder à l'objet Request sous-jacent).WebClient
est utile pour les situations où vous voulez juste faire une opération (par exemple: POST / GET / upload formulaire) et la flemme de créer et de gérerHttpWebRequest
,RequestStream
,HttpWebResponse
et flux de réponse.la source
Du blog de Tim Heuer - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
Au lieu de cela, dans Silverlight, vous souhaiterez utiliser WebClient ou HttpWebRequest. Quelle est la différence? Voici la version timheuer. WebClient est une implémentation plus simple permettant de faire des requêtes GET très facilement et d'obtenir un flux de réponse. HttpWebRequest est idéal lorsque vous avez besoin d'un contrôle un peu plus granulaire sur la demande, que vous devez envoyer des en-têtes ou d'autres personnalisations.
la source
La classe WebClient s'exécute sur le thread de l'interface utilisateur, de sorte que l'interface utilisateur ne répond pas pendant le téléchargement des données à partir d'Internet. En revanche, la classe HttpWebRequest ne bloque pas le thread de l'interface utilisateur et votre application est réactive. Ainsi, dans les applications où une grande quantité de données doit être téléchargée à partir d'Internet ou si l'accès à la source des données est lent, vous devez utiliser la classe HttpWebRequest; dans tous les autres cas, vous devez utiliser la classe WebClient.
la source
Un autre inconvénient de
WebClient
est - il ne tient pas compte du HTTPContentType
de »charset
valeur lorsque vous l' utilisez pour obtenir le texte de réponse. Vous devez définir explicitement l'encodage via laEncoding
propriété.la source
Encoding
- vous ne pouvez pas connaître le codage avant la demande, donc l'API WebClient rend très improbable que vous puissiez télécharger correctement une chaîne dans un codage inconnu.Une dernière chose que HttpWebrquest vous permet de compresser mais la classe Net.WebClient ne prend pas en charge la compression HTTP
la source
GetWebRequest
. Dans ce cas, vous modifiezHttpWebRequest.AutomaticDecompressiong
simplement la propriété sous-jacente ).Le "HtttpWebRequest" est obsolète dans .NET 4.5. Maintenant, cette classe est uniquement interne.
la source
WebRequest
plutôt.Un exemple: publier des données et récupérer les données traitées en un seul cycle de demande / réponse semble impossible avec WebClient, mais vous pouvez le faire avec HtttpWebRequest.
la source