Wydaje mi się, że większość tego, co można osiągnąć, HttpWebRequest/Response
można również osiągnąć z WebClient
klasą. Czytałem gdzieś, że WebClient
jest to opakowanie wysokiego poziomu WebRequest/Response
.
Jak dotąd nie widzę niczego, co można by osiągnąć HttpWebRequest/Response
, czego nie można by osiągnąć WebClient
, ani gdzie HttpWebRequest / Response da ci większą „drobnoziarnistą” kontrolę.
Kiedy powinienem używać WebClient i kiedy HttpWebRequest/Response
? (Oczywiście HttpWebRequest/Response
są specyficzne dla HTTP).
Jeśli HttpWebRequest/Response
jesteś na niższym poziomie WebClient
, co mogę osiągnąć HttpWebRequest/Response
, czego nie mogę osiągnąć WebClient
?
base.GetWebRequest
aby go utworzyć, a następnie dostosować to, co chceszHttpWebRequest
ujawnia o wiele więcej rzeczy, które pozwalają na precyzyjną kontrolę protokołu, na przykład: czy chcesz używać Keep-Alive, jakiej puli połączeń użyć, czy buforować zapisy, czy nie itp.WebClient
nie ujawnia wszystkich z nich (chociaż można utworzyć podklasę ziWebClient
uzyskać dostęp do bazowego obiektu Request).WebClient
Jest to przydatne dla tych sytuacjach, w których po prostu chcą zrobić operację (np: POST / GET / Forma upload) i cant być jedno, aby tworzyć i zarządzaćHttpWebRequest
,RequestStream
,HttpWebResponse
oraz strumień odpowiedzi.źródło
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 to prostsza implementacja, która bardzo łatwo wykonuje żądania GET i otrzymuje strumień odpowiedzi. HttpWebRequest jest świetny, gdy potrzebujesz nieco bardziej szczegółowej kontroli nad żądaniem, musisz wysłać nagłówki lub inne dostosowania.
źródło
W WebClient klasa działa na wątku interfejsu użytkownika, dzięki czemu interfejs użytkownika nie reaguje, gdy dane są pobierane z Internetu. Z drugiej strony klasa HttpWebRequest nie blokuje wątku interfejsu użytkownika, a aplikacja jest responsywna. Tak więc w aplikacjach, w których ma być pobierana duża ilość danych z Internetu lub jeśli źródło danych jest wolno dostępne, należy użyć klasy HttpWebRequest; we wszystkich innych przypadkach należy używać klasy WebClient.
źródło
Inną wadą programu
WebClient
jest to, że ignoruje on wartość HTTPContentType
,charset
gdy używasz go do uzyskania tekstu odpowiedzi. Musisz jawnie ustawić kodowanie za pośrednictwemEncoding
właściwości.źródło
Encoding
- nie możesz znać kodowania, dopóki nie pojawi się żądanie, więc interfejs API WebClient sprawia, że jest bardzo mało prawdopodobne, że będziesz w stanie poprawnie pobrać ciąg w nieznanym kodowaniu.Jeszcze jedno, HttpWebrquest pozwala na kompresję, ale klasa Net.WebClient nie obsługuje kompresji HTTP
źródło
GetWebRequest
. W takim przypadku po prostu dostosowujesz podstawowąHttpWebRequest.AutomaticDecompressiong
właściwość ).„HtttpWebRequest” jest przestarzały w .NET 4.5. Teraz ta klasa jest tylko wewnętrzna.
źródło
WebRequest
zamiast tego.Jeden przykład: wysyłanie danych i odzyskiwanie przetworzonych danych w jednym cyklu żądanie / odpowiedź wydaje się niemożliwe w przypadku WebClient, ale możesz to zrobić za pomocą HtttpWebRequest.
źródło