Programmēšana

Kad lietot WebClient pret HttpClient pret HttpWebRequest

Strādājot .NET Framework, jums ir trīs dažādas izvēles iespējas, kā patērēt REST API: WebClient, HttpClient un HttpWebRequest. Šajā amatā mēs aplūkosim šos trīs veidus, kā mēs varam piekļūt REST API no pārvaldītās vides, t.i., neizmantojot trešo pušu bibliotēkas. Turpmākajās sadaļās es ilustrēšu šīs pieejas ar atbilstošiem kodu piemēriem, lai palīdzētu labāk izprast jēdzienus.

Īsumā WebRequest savā HTTP specifiskajā ieviešanā HttpWebRequest pārstāv sākotnējo veidu, kā patērēt HTTP pieprasījumus .NET Framework. WebClient nodrošina vienkāršu, bet ierobežotu iesaiņojumu ap HttpWebRequest. Un HttpClient ir jauns un uzlabots veids, kā veikt HTTP pieprasījumus un ziņas, kas nonācis kopā ar .NET Framework 4.5.

Sāksim mūsu diskusiju ar WebRequest abstrakto klasi.

System.Net.WebRequest

Klase System.Net.WebRequest ir abstrakta klase. Tādējādi, lai patērētu HTTP pieprasījumus, izmantojot šo klasi, jums būs jāizveido HttpWebRequest vai FileWebRequest. Šis koda fragments parāda, kā jūs varat strādāt ar WebRequest.

WebRequest webRequest = WebRequest.Create (uri);

webRequest.Credentials = CredentialCache.DefaultCredentials;

webRequest.Method;

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

System.Net.HttpWebRequest

WebRequest bija pirmā klase .NET Framework, kas patērēja HTTP pieprasījumus. Tas dod jums daudz elastības, apstrādājot katru pieprasījuma un atbildes objektu aspektu, nebloķējot lietotāja saskarnes pavedienu. Jūs varat izmantot šo klasi, lai, strādājot ar HTTP, piekļūtu galvenēm, sīkfailiem, protokoliem un taimautiem un darbotos ar tiem. Šis koda fragments parāda, kā var izmantot vietni HttpWebRequest.

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

WebResponse response = http.GetResponse ();

MemoryStream memoryStream = atbilde.GetResponseStream ();

StreamReader streamReader = jauns StreamReader (memoryStream);

virknes dati = streamReader.ReadToEnd ();

Microsoft dokumentāciju vietnē HttpWebRequest varat atrast šeit.

System.Net.WebClient

.NET klase System.Net.WebClient nodrošina augsta līmeņa abstrakciju virs HttpWebRequest. WebClient ir tikai iesaiņotājs ap HttpWebRequest, tāpēc iekšēji izmanto HttpWebRequest. Tādējādi WebClient ir nedaudz lēns, salīdzinot ar HttpWebRequest, taču tas prasa daudz mazāk koda. WebClient varat izmantot vienkāršiem veidiem, kā izveidot savienojumu ar HTTP pakalpojumiem un strādāt ar tiem. Tā parasti ir labāka izvēle nekā HttpWebRequest, ja vien jums nav jāizmanto HttpWebRequest piedāvātās papildu funkcijas. Šis koda fragments parāda, kā jūs varat strādāt ar WebClient.

virknes dati = null;

izmantojot (var webClient = new WebClient ())

{

dati = webClient.DownloadString (url);

}

System.Net.Http.HttpClient

HttpClient tika ieviests .NET Framework 4.5. Izstrādātājiem, kas izmanto .NET 4.5 vai jaunāku versiju, tas ir vēlamais veids, kā patērēt HTTP pieprasījumus, ja vien jums nav īpaša iemesla to neizmantot. Būtībā HttpClient apvieno HttpWebRequest elastību un WebClient vienkāršību, sniedzot labāko no abām pasaulēm.

HttpWebRequest klase nodrošina lielu kontroli pār pieprasījuma / atbildes objektu. Tomēr jums jāapzinās, ka HttpClient nekad netika izstrādāts kā WebClient aizstājējs. Kad jums ir nepieciešamas papildu funkcijas, kuras nodrošina HttpWebRequest, jums jāizmanto HttpWebRequest, nevis HttpClient. Turklāt atšķirībā no WebClient, HttpClient trūkst atbalsta progresa ziņojumiem un pielāgotām URI shēmām.

Lai gan HttpClient neatbalsta FTP, ņirgāties un testēt HttpClient ir vieglāk. Visas I / O saistītās HttpClient metodes ir asinhronas, un jūs varat izmantot to pašu HttpClient instanci, lai veiktu arī vienlaikus pieprasījumus. Šis koda fragments parāda, kā jūs varat strādāt ar HttpClient.

publiskais asinhronais uzdevums GetAuthorsAsync (virknes uri)

{

Autors autors = null;

HttpResponseMessage atbilde = gaida klientu.GetAsync (uri);

ja (atbilde.IsSuccessStatusCode)

    {

autors = gaidiet atbildi.Content.ReadAsAsync ();

    }

atgriešanās autors;

}

Ņemiet vērā, ka tad, ja atbildē ir kļūda, HttpClient neizmet kļūdu. Drīzāk tas nosaka IsSuccessStatusCode īpašumu uz nepatiesu. Ja vēlaties mest izņēmumu, ja IsSuccessStatusCode īpašība ir nepatiesa, varat piezvanīt uz NodrošinātSuccessStatusCode metodi atbildes instancē, kā parādīts zemāk.

response.EnsureSuccessStatusCode ();

HttpClient tika izstrādāts tā, lai tas būtu vienreizējs un atkārtoti izmantots visā lietojumprogrammas dzīves ciklā - nevajadzētu izveidot jaunu HttpClient instanci katram pieprasījumam, kas jāapstrādā jūsu lietojumprogrammā. Ja jūs to izdarīsit, intensīvā satiksme varētu izsmelt pieejamās kontaktligzdas, kā rezultātāSocketException kļūdas. Ieteicamā prakse ir izveidot vienu koplietojamu HttpClient instanci.

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