WebClient vs. HttpWebRequest / HttpWebResponse

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • C # WebClient отключить кеш
  • Использование CookieContainer с classом WebClient
  • Как получить строку json из url?
  • Аутентификация и запрос временной шкалы пользователя с помощью API Twitter 1.1 oAuth
  • Как изменить таймаут на объекте .NET WebClient
  • Как мне войти на сайт с помощью WebClient?
  • C # webclient и прокси-сервер
  • Как заполнить формы и отправить с помощью Webclient в C #
  • Как получить код статуса из веб-клиента?
  • C # - Как сделать HTTP-вызов
  • Как я могу программным образом удалить 2 ограничения соединения в WebClient
  • Давайте будем гением компьютера.