Відповіді:
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, щоб допомогти згладити ці проблеми.