WebClient vs. HttpWebRequest/HttpWebResponse

Wydaje mi się, że większość tego, co można osiągnąć z HttpWebRequest/Response Może być również osiągnięty za pomocą WebClient klasy. Czytałem gdzieś, że {[1] } jest wysokiej klasy opakowaniem dla WebRequest/Response.
Jak na razie nie widzę niczego, co można osiągnąć za pomocą HttpWebRequest/Response, czego nie można osiągnąć za pomocą WebClient, Ani gdzie HttpWebRequest / Response da Ci bardziej "drobnoziarnistą" kontrolę.

Kiedy należy używać WebClient i kiedy HttpWebRequest/Response? (Oczywiście {[0] } są HTTP dokładnie.)

Jeśli HttpWebRequest/Response są niższym poziomem, to WebClient, Co mogę osiągnąć z HttpWebRequest/Response, czego nie mogę osiągnąć z WebClient?

Author: Avi, 2009-11-07

8 answers

Użycie HttpWebRequest daje większą kontrolę nad żądaniem. Możesz ustawić pliki cookie, nagłówki, protokół itp... W odpowiedzi Możesz również pobrać pliki cookie i nagłówki

 85
Author: Thomas Levesque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-07 21:01:54

HttpWebRequest wyświetla dużo więcej rzeczy, które pozwalają na drobnoziarnistą kontrolę protokołów, na przykład: czy chcesz użyć Keep-Alive, jakiej puli połączeń użyć, czy do buforowania zapisów, czy nie, itp.

WebClient nie ujawnia tych wszystkich (chociaż możesz podklasować z WebClient i uzyskać dostęp do bazowego obiektu Request).

WebClient jest przydatny w sytuacjach, w których po prostu chcesz wykonać operację (NP: POST / GET / Form upload) i nie możesz sobie poradzić z tworzeniem i zarządzaniem HttpWebRequest, RequestStream, HttpWebResponse, i strumień odpowiedzi.

 54
Author: feroze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-30 17:54:15

Z bloga Tima Heuera - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx

Zamiast tego w Silverlight będziesz chciał użyć WebClient lub HttpWebRequest. Co za różnica? Oto wersja timheuera. WebClient jest prostszą implementacją wykonującą żądania GET I get a response stream. HttpWebRequest jest świetny, gdy potrzebujesz nieco bardziej szczegółowej kontroli nad żądaniem, musisz wysłać nagłówki lub inne dostosowania.

 14
Author: Benjamin Cox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-07 21:02:46

Klasa WebClient działa w wątku interfejsu użytkownika, więc interfejs użytkownika nie reaguje podczas pobierania danych z Internetu. Z drugiej strony, klasa HttpWebRequest nie blokuje wątku interfejsu użytkownika, a Twoja aplikacja reaguje. Tak więc, w aplikacjach, w których duża ilość danych ma być pobrana z Internetu lub jeśli źródło danych jest wolne, należy użyć klasy HttpWebRequest; we wszystkich innych przypadkach należy użyć Klasa WebClient.

 12
Author: Baaziz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-23 04:45:47

"HtttpWebRequest" jest przestarzały w. NET 4.5. Ta klasa jest tylko wewnętrzna.

 6
Author: Julio Spader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-27 19:28:59

Jeszcze jedno HttpWebrquest pozwala na kompresję, ale on Net.Klasa WebClient nie obsługuje kompresji HTTP

 5
Author: Humble Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-01 01:30:06

Kolejną wadą WebClient jest ignorowanie wartości HTTP ContentType s charset, Gdy używasz jej do uzyskania tekstu odpowiedzi. Musisz jawnie ustawić kodowanie za pomocą właściwości Encoding.

 5
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-09 02:37:39

Jeden przykład: wysyłanie danych i odzyskiwanie przetworzonych danych w jednym cyklu żądania / odpowiedzi wydaje się niemożliwe z WebClient, ale możesz to zrobić za pomocą HtttpWebRequest.

 2
Author: synergetic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-30 07:08:41