Мне кажется, что большую часть того, что можно сделать, HttpWebRequest/Response
можно сделать и с WebClient
классом. Я где-то читал, что WebClient
это оболочка высокого уровня для WebRequest/Response
.
Пока я не вижу ничего, что можно было бы сделать с помощью того, HttpWebRequest/Response
чего нельзя было бы сделать WebClient
, и где HttpWebRequest / Response предоставит вам более «детальный» контроль.
Когда мне следует использовать WebClient и когда HttpWebRequest/Response
? (Очевидно, HttpWebRequest/Response
они специфичны для HTTP.)
Если HttpWebRequest/Response
уровень ниже, то WebClient
что я могу сделать с HttpWebRequest/Response
тем, с чем не могу WebClient
?
base.GetWebRequest
для его создания, а затем настраивать именно то, что хотитеHttpWebRequest
предоставляет гораздо больше вещей, которые позволяют вам детально контролировать протокол, например: хотите ли вы использовать Keep-Alive, какой пул соединений использовать, буферизовать ли записи или нет и т. д.WebClient
не раскрывает все из них (хотя вы можетеWebClient
создать подкласс и получить доступ к базовому объекту Request).WebClient
полезно для тех ситуаций , когда вы просто хотите сделать операцию (например: POST / GET / Форма загрузки) и не можете быть обеспокоены , чтобы создавать и управлятьHttpWebRequest
,RequestStream
,HttpWebResponse
и поток ответа.источник
Из блога Тима Хойера - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
Вместо этого в Silverlight вы захотите использовать WebClient или HttpWebRequest. Какая разница? Вот версия Timheuer. WebClient - это более простая реализация, которая очень легко выполняет запросы GET и получает поток ответов. HttpWebRequest отлично подходит, когда вам нужно немного более детально контролировать запрос, нужно отправлять заголовки или другие настройки.
источник
Класс WebClient работает в потоке пользовательского интерфейса, поэтому пользовательский интерфейс не отвечает, пока данные загружаются из Интернета. С другой стороны, класс HttpWebRequest не блокирует поток пользовательского интерфейса, и ваше приложение реагирует. Итак, в приложениях, в которых должен быть загружен большой объем данных из Интернета или если доступ к источнику данных медленный, следует использовать класс HttpWebRequest; во всех остальных случаях следует использовать класс WebClient.
источник
Другой недостаток
WebClient
заключается в том, что он игнорирует значение HTTPContentType
,charset
когда вы используете его для получения текста ответа. Вы должны явно указать кодировку черезEncoding
свойство.источник
Encoding
- вы не можете узнать кодировку до момента запроса, поэтому API WebClient делает очень маловероятным, что вы сможете правильно загрузить строку в неизвестной кодировке.Еще одна вещь, которую HttpWebrquest позволяет сжатие, но класс Net.WebClient не поддерживает сжатие HTTP.
источник
GetWebRequest
. В этом случае вы просто настраиваете базовоеHttpWebRequest.AutomaticDecompressiong
свойство ).«HtttpWebRequest» устарел в .NET 4.5. Теперь этот класс является только внутренним.
источник
WebRequest
вместо этого.Один пример: публикация данных и получение обратно обработанных данных за один цикл запроса / ответа кажется невозможным с помощью WebClient, но вы можете сделать это с помощью HtttpWebRequest.
источник