WebClient - это абстракция более высокого уровня, созданная поверх HttpWebRequest для упрощения наиболее распространенных задач. Например, если вы хотите получить содержимое из HttpWebResponse, вы должны прочитать из потока ответов:
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 - для тех случаев, когда вам нужен больший контроль над всем запросом.
ServicePointManager.Expect100Continue = false
, делает другие нестандартные вещи и имеет много причуд и особенностей. Я начал RestSharp, чтобы помочь сгладить эти проблемы.HttpClient
который поставляется с .NET 4.5, который может (или не может?) Решить некоторые из вышеупомянутых проблем ...using (WebClient client = new WebClient())
Также у WebClient нет свойства тайм-аута. И это проблема, потому что значение по умолчанию составляет 100 секунд, и это слишком много, чтобы указать, если нет подключения к Интернету.
Обойти эту проблему можно здесь https://stackoverflow.com/a/3052637/1303422
источник
Я знаю, что это слишком долго, чтобы ответить, но просто как информационная цель для будущих читателей:
WebRequest
Это
WebRequest
абстрактный базовый класс. Таким образом, вы на самом деле не используете его напрямую. Вы используете его через производные классы -HttpWebRequest
иFileWebRequest
.Вы используете метод Create
WebRequest
для создания экземпляраWebRequest
.GetResponseStream
возвращаетсяdata stream
.Есть также
FileWebRequest
иFtpWebRequest
классы, которыеinherit
отWebRequest
. Как правило, вы будете использоватьWebRequest
, ну, сделать запрос и преобразовать возврат к либоHttpWebRequest
,FileWebRequest
илиFtpWebRequest
, в зависимости от вашего запроса. Ниже приведен пример:Пример:
WebClient
WebClient
предоставляет общие операцииsending
иreceiving
данные из ресурса, обозначенногоURI
. Просто это абстракция более высокого уровняHttpWebRequest
. Это «общие операции» - это то, что отличаетсяWebClient
от этогоHttpWebRequest
, как показано в примере ниже:Пример:
Есть также
DownloadData
иDownloadFile
операции поWebClient
инстанции. Эти общие операции также упрощают код того, что мы обычно делаемHttpWebRequest
. ИспользуяHttpWebRequest
, мы должны получить ответ на наш запрос, создать экземпляр,StreamReader
чтобы прочитать ответ и, наконец, преобразовать результат в любой тип, который мы ожидаем. СWebClient
, мы просто позвонимDownloadData, DownloadFile or DownloadString
.Однако имейте в виду, что
WebClient.DownloadString
не учитываетencoding
ресурс, который вы запрашиваете. Таким образом, вы, вероятно, в конечном итоге получите странные символы, если вы не укажете кодировку.ПРИМЕЧАНИЕ. По сути, « WebClient занимает несколько строк кода по сравнению с Webrequest »
источник
webClient.UploadData(url, "POST", bytes)
чтобы указать метод (см. Документы MSDN ).