Sei que é muito tempo para responder, mas apenas como um objetivo informativo para futuros leitores:
WebRequest
System.Object
System.MarshalByRefObject
System.Net.WebRequest
A WebRequesté uma classe base abstrata. Então você realmente não o usa diretamente. Você o usa através das classes derivadas - HttpWebRequeste FileWebRequest.
Você usa o método Create de WebRequestpara criar uma instância de WebRequest. GetResponseStreamretorna data stream.
Existem também FileWebRequeste FtpWebRequestclasses que inheritde WebRequest. Normalmente, você costuma WebRequestfazer, bem, fazer uma solicitação e converter o retorno em HttpWebRequest, FileWebRequestou FtpWebRequest, depende da sua solicitação. Abaixo está um exemplo:
Exemplo:
var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();
Cliente da web
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
WebClientfornece operações comuns sendinge receivingdados de um recurso identificado por a URI. Simplesmente, é uma abstração de nível superior de HttpWebRequest. A '' operações comuns é o que diferencia WebClienta partir de HttpWebRequest, como também mostrado no exemplo abaixo:
Exemplo:
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
Também existem DownloadDatae DownloadFileoperações sob WebClientinstância. Essas operações comuns também simplificam o código do que normalmente faríamos HttpWebRequest. Usando HttpWebRequest, temos que obter a resposta da nossa solicitação, instanciar StreamReaderpara ler a resposta e, finalmente, converter o resultado para o tipo que esperamos. Com WebClient, simplesmente chamamos DownloadData, DownloadFile or DownloadString.
No entanto, lembre-se de que WebClient.DownloadStringnão considera encodingo recurso que você está solicitando. Portanto, você provavelmente acabaria recebendo caracteres estranhos se não especificar e codificar.
OBSERVAÇÃO: Basicamente "o WebClient usa poucas linhas de código em comparação com o Webrequest "
ServicePointManager.Expect100Continue = false, faz outras coisas fora do padrão e tem muitas peculiaridades e idiossincrasias. Iniciei o RestSharp para ajudar a resolver esses problemas.