WebClient vs. HttpWebRequest/HttpWebResponse

Мне кажется, что большинство из того, что может быть достигнуто с помощью HttpWebRequest/Response, также можно выполнить с помощью класса WebClient. Я где-то читал, что WebClient - это оболочка высокого уровня для WebRequest/Response.
 До сих пор я не вижу ничего, что может быть достигнуто с помощью HttpWebRequest/Response, которое невозможно выполнить с помощью WebClient, а также где HttpWebRequest/Response даст вам более "мелкозернистый" контроль.

Когда следует использовать WebClient и HttpWebRequest/Response? (Очевидно, что HttpWebRequest/Response являются специфичными для HTTP.)

Если HttpWebRequest/Response - нижний уровень, то WebClient, что я могу выполнить с помощью HttpWebRequest/Response, которого я не могу выполнить с помощью WebClient?

Ответ 1

Использование HttpWebRequest дает вам больше контроля над запросом. Вы можете установить файлы cookie, заголовки, протокол и т.д. В ответ вы также можете получить файлы cookie и заголовки

Ответ 2

HttpWebRequest предоставляет гораздо больше материалов, которые позволяют вам управлять мелким зернистым протоколом, например: хотите ли вы использовать Keep-Alive, какой пул подключений использовать, буферизировать записи или нет и т.д.

WebClient не выставляет все из них (хотя вы можете подклассом из WebClient и getaccess для основного объекта запроса).

WebClient полезен для ситуаций, когда вы просто хотите выполнить операцию (например: POST/GET/Form upload) и не можете беспокоиться о создании и управлении HttpWebRequest, RequestStream, HttpWebResponse, и поток ответов.

Ответ 3

Из блога Тима Хейера - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx

Вместо этого в Silverlight вы захотите использовать WebClient или HttpWebRequest. Какая разница? Здесь версия timheuer. WebClient - это более простая реализация, которая действительно делает запросы GET и получает поток ответов. HttpWebRequest отлично подходит, когда вам требуется более подробный контроль над запросом, нужно отправлять заголовки или другие настройки.

Ответ 4

Класс WebClient выполняется в потоке пользовательского интерфейса, поэтому пользовательский интерфейс не реагирует, когда данные загружаются из Интернета. С другой стороны, класс HttpWebRequest не блокирует поток пользовательского интерфейса, и ваше приложение реагирует. Таким образом, в приложениях, где большой объем данных должен быть загружен из Интернета или если источник данных работает медленно, вы должны использовать класс HttpWebRequest; во всех остальных случаях вы должны использовать класс WebClient.

Ответ 5

"HtttpWebRequest" устарел в .NET 4.5. Теперь этот класс является только внутренним.

Ответ 6

Еще одна вещь, которую HttpWebrquest позволяет вам сжать, но он класс Net.WebClient не поддерживает HTTP-сжатие

Ответ 7

Другим недостатком WebClient является то, что он игнорирует значение HTTP ContentType charset, когда вы используете его для получения текста ответа. Вы должны явно установить кодировку с помощью свойства Encoding.

Ответ 8

Один пример. Проводка данных и получение обработанных данных в одном цикле запроса/ответа, по-видимому, невозможны с помощью WebClient, но вы можете сделать это с помощью HtttpWebRequest.