Programovanie

Kedy použiť WebClient vs. HttpClient vs. HttpWebRequest

Pri práci v rozhraní .NET Framework máte k dispozícii tri rôzne možnosti konzumácie rozhraní REST API: WebClient, HttpClient a HttpWebRequest. V tomto príspevku sa pozrieme na tieto tri spôsoby, ako môžeme pristupovať k rozhraniam REST API v rámci spravovaného prostredia, t. J. Bez toho, aby sme sa uchýlili k knižniciam tretích strán. V nasledujúcich častiach ilustrujem tieto prístupy pomocou príkladov relevantných kódov, ktoré vám pomôžu lepšie porozumieť konceptom.

Stručne povedané, WebRequest - vo svojej implementácii špecifickej pre HTTP, HttpWebRequest - predstavuje originálny spôsob, ako spotrebovať požiadavky HTTP v .NET Framework. WebClient poskytuje jednoduchý, ale obmedzený obal okolo HttpWebRequest. A HttpClient je nový a vylepšený spôsob vybavovania požiadaviek a príspevkov HTTP, ktorý bol dodaný s .NET Framework 4.5.

Začnime našu diskusiu s abstraktnou triedou WebRequest.

System.Net.WebRequest

Trieda System.Net.WebRequest je abstraktná trieda. Preto budete musieť vytvoriť HttpWebRequest alebo FileWebRequest, aby ste pomocou tejto triedy mohli využívať požiadavky HTTP. Nasledujúci úryvok kódu ukazuje, ako môžete pracovať s WebRequest.

WebRequest webRequest = WebRequest.Create (uri);

webRequest.Credentials = CredentialCache.DefaultCredentials;

webRequest.Method;

HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse ();

System.Net.HttpWebRequest

WebRequest bola prvá trieda poskytovaná v rozhraní .NET Framework, ktorá využívala požiadavky HTTP. Poskytuje vám veľkú flexibilitu pri spracovávaní všetkých aspektov objektov požiadaviek a odpovedí bez blokovania vlákna používateľského rozhrania. Túto triedu môžete použiť na prístup a prácu s hlavičkami, súbormi cookie, protokolmi a časovými limitmi pri práci s protokolom HTTP. Nasledujúci úryvok kódu ilustruje, ako sa dá HttpWebRequest použiť.

HttpWebRequest http = HttpWebRequest) WebRequest.Create („// localhost: 8900 / api / default“);

Odpoveď WebResponse = http.GetResponse ();

MemoryStream memoryStream = response.GetResponseStream ();

StreamReader streamReader = nový StreamReader (memoryStream);

string data = streamReader.ReadToEnd ();

Dokumentáciu spoločnosti Microsoft k HttpWebRequest nájdete tu.

System.Net.WebClient

Trieda System.Net.WebClient v .NET poskytuje vysokoúrovňovú abstrakciu nad HttpWebRequest. WebClient je iba obal okolo HttpWebRequest, takže HttpWebRequest používa interne. Webový klient je teda v porovnaní s HttpWebRequest trochu pomalý, ale vyžaduje, aby ste napísali oveľa menej kódu. Webového klienta môžete použiť na jednoduché spôsoby pripojenia a práce so službami HTTP. Je to všeobecne lepšia voľba ako HttpWebRequest, pokiaľ nepotrebujete využívať ďalšie funkcie, ktoré HttpWebRequest poskytuje. Nasledujúci úryvok kódu ukazuje, ako môžete pracovať s WebClient.

string data = null;

pomocou (var webClient = nový WebClient ())

{

data = webClient.DownloadString (url);

}

System.Net.Http.HttpClient

HttpClient bol predstavený v .NET Framework 4.5. Pre vývojárov, ktorí používajú .NET 4.5 alebo novší, je to preferovaný spôsob využívania požiadaviek HTTP, pokiaľ nemáte konkrétny dôvod nepoužívať ich. HttpClient v podstate kombinuje flexibilitu HttpWebRequest a jednoduchosť WebClient, vďaka čomu získate to najlepšie z oboch svetov.

Trieda HttpWebRequest poskytuje veľkú kontrolu nad objektom žiadosť / odpoveď. Mali by ste však vedieť, že HttpClient nikdy nebol navrhnutý ako náhrada za WebClient. Mali by ste použiť HttpWebRequest namiesto HttpClient, kedykoľvek potrebujete ďalšie funkcie, ktoré HttpWebRequest poskytuje. Ďalej, na rozdiel od WebClienta, HttpClient postráda podporu pre hlásenie pokroku a vlastné schémy URI.

Aj keď HttpClient nepodporuje FTP, zosmiešňovanie a testovanie HttpClient je jednoduchšie. Všetky metódy viazané na I / O v HttpClient sú asynchrónne a na vytvorenie súbežných požiadaviek môžete použiť rovnakú inštanciu HttpClient. Nasledujúci úryvok kódu ilustruje, ako môžete pracovať s HttpClient.

verejná asynchronná úloha GetAuthorsAsync (reťazec URI)

{

Autor autor = null;

HttpResponseMessage response = await client.GetAsync (uri);

if (response.IsSuccessStatusCode)

    {

autor = čakať na odpoveď.Content.ReadAsAsync ();

    }

návratový autor;

}

Upozorňujeme, že ak sa v odpovedi vyskytne chyba, HttpClient chybu nevyhodí. Skôr to určuje IsSuccessStatusCode majetok na nepravdivý. Ak chcete uplatniť výnimku, ak IsSuccessStatusCode vlastnosť je nepravdivá, môžete zavolať na EnsureSuccessStatusCode metóda na inštancii odpovede, ako je uvedené nižšie.

response.EnsureSuccessStatusCode ();

HttpClient bol navrhnutý na vytvorenie jednej inštancie a opätovné použitie počas celého životného cyklu aplikácie - nemali by ste vytvárať novú inštanciu HttpClient pre každú požiadavku, ktorú musí vaša aplikácia spracovať. Ak tak urobíte, dostupné zásuvky by sa mohli vyčerpať hustou premávkou, čo by mohlo viesť kSocketException chyby. Odporúčaným postupom je vytvoriť jednu zdieľanú inštanciu HttpClient.

$config[zx-auto] not found$config[zx-overlay] not found