Какая разница между классами WebClient и HTTPWebRequest in.NET?
какая разница между WebClient и HttpWebRequest классы в .NET? они оба делают очень похожие вещи. На самом деле, почему они не были объединены в один класс (слишком много методов/переменных и т. д. Может быть одной из причин, но в .NET есть другие классы, которые нарушают это правило).
спасибо.
3 ответов:
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 хорош, когда вам нужно больше контролировать весь запрос.
также WebClient не имеет свойства timeout. И это проблема, потому что значение dafault составляет 100 секунд, и это слишком много, чтобы указать, нет ли подключения к интернету.
обходной путь для этой проблемы здесь https://stackoverflow.com/a/3052637/1303422
я знаю, что это слишком долго, чтобы ответить, но только как информационная цель для будущих читателей:
WebRequest
System.Object System.MarshalByRefObject System.Net.WebRequestThe
WebRequestявляется абстрактным базовым классом. Так что вы на самом деле не использовать его напрямую. Вы используете его через производные классы -HttpWebRequestиFileWebRequest.вы используете метод создания
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данные из ресурса, идентифицированного aURI. Просто, это абстракция более высокого уровня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не рассмотрим!--35--> ресурса, который вы запрашиваете. Таким образом, вы, вероятно, в конечном итоге получите странные символы, если вы не укажете и не закодируете.Примечание:в основном "WebClient занимает несколько строк кода по сравнению с Webrequest"
Comments