Відповіді:
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 підходить тоді, коли вам потрібен більший контроль над усім запитом.
HttpClientстикається з цим, як я щойно, зауважте, на полі, який називається .NET 4.5, є новий гравець, який постачається разом з .NET 4.5, який може (чи не може?) Вирішити деякі з вищезазначених проблем ...
using (WebClient client = new WebClient())
Також WebClient не має властивості таймауту. І в цьому проблема, адже значення за замовчуванням становить 100 секунд, і це занадто багато, щоб вказати, чи немає підключення до Інтернету.
Вирішення цієї проблеми можна знайти тут https://stackoverflow.com/a/3052637/1303422
Я знаю, що це занадто давно відповідати, але просто як інформаційна мета для майбутніх читачів:
WebRequest
System.Object
System.MarshalByRefObject
System.Net.WebRequest
Це WebRequestабстрактний базовий клас. Таким чином, ви фактично не використовуєте його безпосередньо. Ви використовуєте його через похідні класи - HttpWebRequestі FileWebRequest.
WebRequestДля створення екземпляра ви використовуєте метод Create 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не враховуєте encodingресурс, про який ви запитуєте. Отже, ви, ймовірно, отримаєте дивні символи, якщо не вкажете і не кодуєте.
ПРИМІТКА. В основному " WebClient займає кілька рядків коду порівняно з Webrequest "
webClient.UploadData(url, "POST", bytes)вказати метод (див. Документи MSDN ).
ServicePointManager.Expect100Continue = false, наприклад , інших нестандартних речей і має багато примх і ідіосинкрасій. Я запустив RestSharp, щоб допомогти згладити ці проблеми.