Я знаю, что это слишком долго, чтобы ответить, но просто как информационная цель для будущих читателей:
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, чтобы помочь сгладить эти проблемы.