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