Me parece que la mayor parte de lo que se puede lograr HttpWebRequest/Responsetambién se puede lograr con la WebClientclase. Leí en alguna parte que WebClientes un contenedor de alto nivel para WebRequest/Response.
Hasta ahora, no puedo ver nada que se pueda lograr con HttpWebRequest/Responseeso que no se puede lograr WebClient, ni donde HttpWebRequest / Response le dará más control "de grano fino".
¿Cuándo debo usar WebClient y cuándo HttpWebRequest/Response? (Obviamente, HttpWebRequest/Responseson específicos de HTTP).
Si HttpWebRequest/Responseson de nivel inferior WebClient, ¿qué puedo lograr con lo HttpWebRequest/Responseque no puedo lograr WebClient?

base.GetWebRequestpara crearla y luego personalizar exactamente lo que deseaHttpWebRequestexpone muchas más cosas que le permiten un control de protocolo de grano fino, por ejemplo: si desea usar Keep-Alive, qué grupo de conexiones usar, si almacenar o no las escrituras en el búfer, etc.WebClientno expone todos esos (aunque puede subclasificarWebClienty acceder geta al objeto Request subyacente).WebClientes útil para aquellas situaciones en las que simplemente quiere hacer una operación (por ejemplo: de POST / GET / formulario de carga) y no puede ser molestado en crear y gestionar laHttpWebRequest,RequestStream,HttpWebResponse, y la secuencia de respuesta.fuente
Del blog de Tim Heuer: http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
En cambio, en Silverlight querrás usar WebClient o HttpWebRequest. ¿Cual es la diferencia? Aquí está la versión de Timheuer. WebClient es una implementación más simple que realiza solicitudes GET con mucha facilidad y obtiene un flujo de respuesta. HttpWebRequest es ideal para cuando necesita un control un poco más granular sobre la solicitud, necesita enviar encabezados u otras personalizaciones.
fuente
La clase WebClient se ejecuta en el hilo de la interfaz de usuario, por lo que la interfaz de usuario no responde mientras se descargan datos de Internet. Por otro lado, la clase HttpWebRequest no bloquea el hilo de la interfaz de usuario y su aplicación responde. Por lo tanto, en aplicaciones donde se va a descargar una gran cantidad de datos de Internet o si el origen de los datos es de acceso lento, debe usar la clase HttpWebRequest; en todos los demás casos, debe usar la clase WebClient.
fuente
Otra desventaja de
WebClientes que ignora el HTTPContentType'scharsetvalor cuando lo utiliza para obtener el texto de respuesta. Debe establecer explícitamente la codificación a través de laEncodingpropiedad.fuente
Encoding: no puede conocer la codificación hasta después de la solicitud, por lo que la API de WebClient hace que sea muy poco probable que pueda descargar correctamente una cadena en una codificación desconocida.Una cosa más que HttpWebrquest le permite la compresión, pero la clase Net.WebClient no admite la compresión HTTP
fuente
GetWebRequest. En este caso, simplemente modifica laHttpWebRequest.AutomaticDecompressiongpropiedad subyacente ).El "HtttpWebRequest" está obsoleto en .NET 4.5. Ahora, esta clase es solo interna.
fuente
WebRequestlugar.Un ejemplo: publicar datos y recuperar datos procesados en un ciclo de solicitud / respuesta parece imposible con WebClient, pero puede hacerlo con HtttpWebRequest.
fuente