Какая разница между classами WebClient и HTTPWebRequest в .NET?

Какая разница между classами WebClient и HttpWebRequest в .NET? Они оба делают очень похожие вещи. На самом деле, почему они не слились в один class (слишком много методов / переменных и т. Д. Могут быть одной причиной, но в .NET есть другие classы, которые нарушают это правило).

Благодарю.

WebClient – это абстракция более высокого уровня, построенная поверх HttpWebRequest для упрощения наиболее распространенных задач. Например, если вы хотите получить контент из HttpWebResponse, вы должны прочитать из streamа ответов:

 var http = (HttpWebRequest)WebRequest.Create("http://example.com"); var response = http.GetResponse(); var stream = response.GetResponseStream(); var sr = new StreamReader(stream); var content = sr.ReadToEnd(); 

С помощью WebClient вы просто выполняете DownloadString :

 var client = new WebClient(); var content = client.DownloadString("http://example.com"); 

Примечание. Для краткости я не using приведенные выше примеры из обоих примеров. Вы должны обязательно позаботиться о том, чтобы правильно разместить объекты веб-запроса.

В общем, WebClient хорош для быстрых и грязных простых запросов, а HttpWebRequest хорош для того, когда вам нужно больше контролировать весь запрос.

Кроме того, WebClient не имеет свойства тайм-аута. И в этом проблема, потому что значение dafault составляет 100 секунд, и это слишком много, чтобы указать, нет ли подключения к Интернету.

Обходной путь для этой проблемы находится здесь https://stackoverflow.com/a/3052637/1303422

Я знаю, что слишком долго, чтобы ответить, но как информационная цель для будущих читателей:

WebRequest

 System.Object System.MarshalByRefObject System.Net.WebRequest 

WebRequest является абстрактным базовым classом. Таким образом, вы фактически не используете его напрямую. Вы используете его через производные classы – HttpWebRequest и FileWebRequest .

Вы используете метод Create WebRequest для создания экземпляра WebRequest . GetResponseStream возвращает data stream .

Существуют также FileWebRequest и FtpWebRequest которые inherit от WebRequest . Как правило, вы должны использовать WebRequest чтобы сделать запрос и преобразовать возврат в HttpWebRequest , FileWebRequest или FtpWebRequest , в зависимости от вашего запроса. Ниже приведен пример:

Пример:

 var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com"); var _response = (HttpWebResponse)_request.GetResponse(); 

WebClient

 System.Object System.MarshalByRefObject System.ComponentModel.Component System.Net.WebClient 

WebClient предоставляет общие операции для sending и receiving данных из ресурса, идентифицированного с помощью URI . Просто это абстракция HttpWebRequest на более высоком уровне. Эта «общая операция» – это то, что отличает WebClient от HttpWebRequest , как показано в примере ниже:

Пример:

 var _client = new WebClient(); var _stackContent = _client.DownloadString("http://stackverflow.com"); 

Существуют также операции DownloadData и DownloadFile под экземпляром WebClient . Эти общие операции также упрощают код того, что мы обычно делаем с HttpWebRequest . Используя HttpWebRequest , мы должны получить ответ от нашего запроса, создать StreamReader для чтения ответа и, наконец, преобразовать результат в любой тип, который мы ожидаем. С помощью WebClient мы просто вызываем DownloadData, DownloadFile or DownloadString .

Однако имейте в виду, что WebClient.DownloadString не учитывает encoding запрашиваемого вами ресурса. Таким образом, вы, вероятно, в конечном итоге получите странные символы, если вы не укажете и не кодируете.

ПРИМЕЧАНИЕ. В основном « WebClient занимает несколько строк кода по сравнению с Webrequest »

  • Аутентификация и запрос временной шкалы пользователя с помощью API Twitter 1.1 oAuth
  • Загрузите и загрузите двоичный файл на / из FTP-сервера в C # /. NET
  • WebClient vs. HttpWebRequest / HttpWebResponse
  • ASP.NET-controller: asynchronous модуль или обработчик завершен, пока асинхронная операция все еще находится на рассмотрении
  • Загрузка файлов на файловый сервер с использованием classа webclient
  • C # WebClient отключить кеш
  • Как мне войти на сайт с помощью WebClient?
  • Как я могу программным образом удалить 2 ограничения соединения в WebClient
  • C # - Как сделать HTTP-вызов
  • Символы в строке изменились после загрузки HTML из Интернета
  • Войдите на сайт, через C #
  • Давайте будем гением компьютера.