Я знаю, что это слишком долго, чтобы ответить, но просто как информационная цель для будущих читателей:
WebRequest
System.Object
System.MarshalByRefObject
System.Net.WebRequest
Это WebRequestабстрактный базовый класс. Таким образом, вы на самом деле не используете его напрямую. Вы используете его через производные классы - 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 »
ServicePointManager.Expect100Continue = false, делает другие нестандартные вещи и имеет много причуд и особенностей. Я начал RestSharp, чтобы помочь сгладить эти проблемы.