Какая разница между классами WebClient и HTTPWebRequest in.NET?



какая разница между WebClient и HttpWebRequest классы в .NET? они оба делают очень похожие вещи. На самом деле, почему они не были объединены в один класс (слишком много методов/переменных и т. д. Может быть одной из причин, но в .NET есть другие классы, которые нарушают это правило).



спасибо.

603   3  

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.WebRequest

The 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 данные из ресурса, идентифицированного a 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 не рассмотрим!--35--> ресурса, который вы запрашиваете. Таким образом, вы, вероятно, в конечном итоге получите странные символы, если вы не укажете и не закодируете.

Примечание:в основном "WebClient занимает несколько строк кода по сравнению с Webrequest"

Comments

    Ничего не найдено.