Parece-me que a maior parte do que pode ser realizado HttpWebRequest/Response
também pode ser realizada com a WebClient
classe. Eu li em algum lugar que WebClient
é um invólucro de alto nível WebRequest/Response
.
Até agora, não vejo nada que possa ser realizado com o HttpWebRequest/Response
que não possa ser realizado WebClient
nem onde o HttpWebRequest / Response fornecerá um controle mais "refinado".
Quando devo usar o WebClient e quando HttpWebRequest/Response
? (Obviamente, HttpWebRequest/Response
são específicos de HTTP.)
Se o HttpWebRequest/Response
nível é inferior WebClient
, o que posso realizar com o HttpWebRequest/Response
que não posso realizar WebClient
?
base.GetWebRequest
para criá-lo e em seguida, personalizar apenas o que você querHttpWebRequest
expõe muito mais coisas que permitem controle de protocolo refinado, por exemplo: se você deseja usar o Keep-Alive, que conjunto de conexões usar, se é necessário armazenar em buffer gravações ou não, etc.WebClient
não expõe tudo isso (embora você possa subclassificarWebClient
e obter acesso ao objeto Request subjacente).WebClient
é útil para as situações em que você só quer fazer uma operação (por exemplo: POST / GET / upload Form) e não pode ser incomodado para criar e gerenciar oHttpWebRequest
,RequestStream
,HttpWebResponse
, e fluxo de resposta.fonte
Do blog de Tim Heuer - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
Em vez disso, no Silverlight, você desejará usar o WebClient ou o HttpWebRequest. Qual é a diferença? Aqui está a versão do timheuer. O WebClient é uma implementação mais simples que realiza solicitações GET com muita facilidade e obtém um fluxo de resposta. O HttpWebRequest é ótimo para quando você precisa de um controle um pouco mais granular sobre a solicitação, precisa enviar cabeçalhos ou outras personalizações.
fonte
A classe WebClient é executada no encadeamento da interface do usuário, portanto, a interface do usuário não responde enquanto os dados estão sendo baixados da Internet. Por outro lado, a classe HttpWebRequest não bloqueia o thread da interface do usuário e seu aplicativo é responsivo. Portanto, em aplicativos em que uma grande quantidade de dados deve ser baixada da Internet ou se a fonte dos dados é lenta para acessar, você deve usar a classe HttpWebRequest; em todos os outros casos, você deve usar a classe WebClient.
fonte
Outra desvantagem de
WebClient
é que ignora o HTTPContentType
'scharset
valor quando você usá-lo para obter o texto de resposta. Você precisa definir explicitamente a codificação por meio daEncoding
propriedadefonte
Encoding
- você não pode saber a codificação até depois da solicitação, portanto, a API do WebClient torna muito improvável que você possa baixar corretamente uma string em uma codificação desconhecida.Mais uma coisa que o HttpWebrquest permite a compactação, mas a classe Net.WebClient não suporta compactação HTTP
fonte
GetWebRequest
. Nesse caso, você simplesmente ajusta aHttpWebRequest.AutomaticDecompressiong
propriedade subjacente ).O "HtttpWebRequest" está obsoleto no .NET 4.5. Agora, essa classe é apenas interna.
fonte
WebRequest
vez disso.Um exemplo: publicar dados e recuperar dados processados em um ciclo de solicitação / resposta parece impossível com o WebClient, mas você pode fazer isso com HtttpWebRequest.
fonte