Programiranje

Kdaj uporabiti WebClient v primerjavi s HttpClient v primerjavi s HttpWebRequest

Na voljo imate tri različne možnosti za uporabo REST API-jev pri delu v .NET Framework: WebClient, HttpClient in HttpWebRequest. V tem prispevku bomo preučili te tri načine, kako lahko dostopamo do API-jev REST iz upravljanega okolja, torej brez zatekanja k neodvisnim knjižnicam. V naslednjih razdelkih bom te pristope ponazoril z ustreznimi primeri kode, da boste lažje razumeli koncepte.

Na kratko, WebRequest - v svoji izvedbi, specifični za HTTP, HttpWebRequest - predstavlja izvirni način porabe zahtev HTTP v .NET Framework. WebClient ponuja preprost, a omejen ovoj okoli HttpWebRequest. In HttpClient je nov in izboljšan način izvajanja zahtev in objav HTTP, ki je prispel z .NET Framework 4.5.

Začnimo razpravo z abstraktnim predavanjem WebRequest.

System.Net.WebRequest

Razred System.Net.WebRequest je abstraktni razred. Tako boste morali ustvariti HttpWebRequest ali FileWebRequest za uporabo zahtev HTTP s tem razredom. Naslednji delček kode prikazuje, kako lahko delate z WebRequest.

WebRequest webRequest = WebRequest.Create (uri);

webRequest.Credentials = CredentialCache.DefaultCredentials;

webRequest.Method;

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

System.Net.HttpWebRequest

WebRequest je bil prvi razred, ki je v .NET Framework na voljo za uporabo zahtev HTTP. Omogoča vam veliko prilagodljivosti pri ravnanju z vsemi vidiki zahtev in odzivov, ne da bi blokiral nit uporabniškega vmesnika. Ta razred lahko uporabljate za dostop in delo z glavami, piškotki, protokoli in časovnimi omejitvami pri delu s HTTP. Naslednji delček kode prikazuje, kako je mogoče uporabiti HttpWebRequest.

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

Odgovor WebResponse = http.GetResponse ();

MemoryStream memoryStream = response.GetResponseStream ();

StreamReader streamReader = nov StreamReader (memoryStream);

niz podatkov = streamReader.ReadToEnd ();

Microsoftovo dokumentacijo o HttpWebRequest lahko najdete tukaj.

System.Net.WebClient

Razred System.Net.WebClient v .NET ponuja visoko abstrakcijo na vrhu HttpWebRequest. WebClient je samo ovoj okoli HttpWebRequest, zato interno uporablja HttpWebRequest. WebClient je zato nekoliko počasen v primerjavi s HttpWebRequest, vendar zahteva, da napišete veliko manj kode. WebClient lahko uporabite za enostavne načine povezovanja in dela s storitvami HTTP. Na splošno je boljša izbira kot HttpWebRequest, razen če morate izkoristiti dodatne funkcije, ki jih ponuja HttpWebRequest. Naslednji delček kode prikazuje, kako lahko delate s programom WebClient.

niz podatkov = nič;

z uporabo (var webClient = new WebClient ())

{

data = webClient.DownloadString (url);

}

System.Net.Http.HttpClient

HttpClient je bil uveden v .NET Framework 4.5. Za razvijalce, ki uporabljajo .NET 4.5 ali novejše različice, je najprimernejši način, da porabijo zahteve HTTP, razen če imate poseben razlog, da ga ne uporabite. V bistvu HttpClient združuje prilagodljivost HttpWebRequest in preprostost WebClienta, kar vam daje najboljše iz obeh svetov.

Razred HttpWebRequest zagotavlja veliko nadzora nad objektom zahteva / odziv. Vendar se morate zavedati, da HttpClient nikoli ni bil zasnovan kot nadomestek za WebClient. Namesto HttpClient uporabite HttpWebRequest, kadar koli potrebujete dodatne funkcije, ki jih ponuja HttpWebRequest. Poleg tega HttpClient za razliko od WebClient nima podpore za poročanje o napredku in sheme URI po meri.

Čeprav HttpClient ne podpira FTP, je posmehovanje in preizkušanje HttpClient lažje. Vse metode I / O, vezane na HttpClient, so asinhrone in lahko uporabite isti HttpClient primerek tudi za sočasne zahteve. Naslednji delček kode prikazuje, kako lahko delate s HttpClientom.

javno async opravilo GetAuthorsAsync (niz uri)

{

Avtor avtor = null;

HttpResponseMessage odgovor = počakajte client.GetAsync (uri);

če (response.IsSuccessStatusCode)

    {

avtor = počakajte na odgovor.Content.ReadAsAsync ();

    }

avtor vrnitve;

}

Upoštevajte, da kadar je v odgovoru napaka, HttpClient napake ne vrne. Namesto tega določa IsSuccessStatusCode lastnost na false. Če želite vrniti izjemo, če je IsSuccessStatusCode lastnost je false, lahko pokličete na EnsureSuccessStatusCode metoda na primer odziva, kot je prikazano spodaj.

response.EnsureSuccessStatusCode ();

HttpClient je bil zasnovan tako, da se enkrat ustvari in ponovno uporabi v celotnem življenjskem ciklu aplikacije - ne bi smeli ustvarjati novega primerka HttpClient za vsako zahtevo, ki jo mora vaša aplikacija obdelati. Če to storite, se lahko vtičnice zaradi gostega prometa izčrpajo, kar povzročiSocketException napake. Priporočena praksa je ustvariti en sam primerek HttpClient.

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