Ohjelmointi

Milloin käyttää WebClientiä vs. HttpClient vs.HttpWebRequest

Sinulla on kolme erilaista vaihtoehtoa REST-sovellusliittymien kuluttamiseen .NET Frameworkissa työskenneltäessä: WebClient, HttpClient ja HttpWebRequest. Tässä viestissä tarkastelemme näitä kolmea tapaa, joilla voimme käyttää REST-sovellusliittymiä hallitussa ympäristössä, ts. Turvautumatta kolmannen osapuolen kirjastoihin. Seuraavissa osioissa havainnollistan näitä lähestymistapoja asiaankuuluvilla koodiesimerkkeillä, jotta voit paremmin ymmärtää käsitteitä.

Lyhyesti sanottuna WebRequest - HTTP-spesifisessä toteutuksessaan HttpWebRequest - edustaa alkuperäistä tapaa käyttää HTTP-pyyntöjä .NET Frameworkissa. WebClient tarjoaa yksinkertaisen, mutta rajoitetun kääreen HttpWebRequestin ympärille. Ja HttpClient on uusi ja parannettu tapa tehdä HTTP-pyyntöjä ja viestejä .NET Framework 4.5: n mukana.

Aloitetaan keskustelu WebRequestin abstraktilla luokalla.

System.Net.WebRequest

System.Net.WebRequest-luokka on abstrakti luokka. Siksi sinun on luotava HttpWebRequest tai FileWebRequest HTTP-pyyntöjen kuluttamiseksi tällä luokalla. Seuraava koodinpätkä näyttää kuinka voit työskennellä WebRequestin kanssa.

WebRequest webRequest = WebRequest.Create (uri);

webRequest.Credentials = CredentialCache.DefaultCredentials;

webRequest.Method;

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

System.Net.HttpWebRequest

WebRequest oli ensimmäinen .NET Frameworkin luokka, joka kuluttaa HTTP-pyyntöjä. Se antaa sinulle paljon joustavuutta käsitellä pyyntö- ja vastausobjektien kaikkia näkökohtia estämättä käyttöliittymän ketjua. Voit käyttää tätä luokkaa päästäksesi otsikoihin, evästeisiin, protokolliin ja aikakatkaisuihin työskennellessäsi HTTP: n kanssa. Seuraava koodinpätkä kuvaa, miten HttpWebRequestia voidaan käyttää.

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

WebResponse response = http.GetResponse ();

MemoryStream memoryStream = vastaus.GetResponseStream ();

StreamReader streamReader = uusi StreamReader (memoryStream);

merkkijono data = streamReader.ReadToEnd ();

Löydät Microsoftin HttpWebRequest-ohjeet täältä.

System.Net.WebClient

.NET-järjestelmän System.Net.WebClient-luokka tarjoaa korkean tason abstraktin HttpWebRequestin päälle. WebClient on vain kääre HttpWebRequestin ympärille, joten käyttää HttpWebRequestia sisäisesti. Siksi WebClient on vähän hidas verrattuna HttpWebRequestiin, mutta vaatii sinua kirjoittamaan paljon vähemmän koodia. Voit käyttää WebClientiä yksinkertaisiin tapoihin muodostaa yhteys HTTP-palveluihin ja työskennellä niiden kanssa. Se on yleensä parempi valinta kuin HttpWebRequest, ellet tarvitse hyödyntää HttpWebRequestin tarjoamia lisäominaisuuksia. Seuraava koodinpätkä näyttää kuinka voit työskennellä WebClientin kanssa.

merkkijono data = null;

käyttäen (var webClient = uusi WebClient ())

{

data = webClient.DownloadString (url);

}

System.Net.Http.HttpClient

HttpClient esiteltiin .NET Framework 4.5: ssä. Kehittäjille, jotka käyttävät .NET 4.5 tai uudempaa versiota, se on ensisijainen tapa käyttää HTTP-pyyntöjä, ellei sinulla ole erityistä syytä olla käyttämättä sitä. Pohjimmiltaan HttpClient yhdistää HttpWebRequestin joustavuuden ja WebClientin yksinkertaisuuden, mikä antaa sinulle molempien maailmojen parhaat puolet.

HttpWebRequest-luokka tarjoaa paljon hallintaa pyyntö- / vastausobjektille. Sinun tulisi kuitenkin olla tietoinen siitä, että HttpClientiä ei ole koskaan suunniteltu korvaamaan WebClientiä. Käytä HttpWebRequest -ohjelmaa HttpClientin sijaan aina, kun tarvitset HttpWebRequestin tarjoamia lisäominaisuuksia. Toisin kuin WebClient, HttpClientiltä puuttuu tuki edistymisraportoinnille ja mukautetuille URI-malleille.

Vaikka HttpClient ei tue FTP: tä, HttpClientin pilkkaaminen ja testaaminen on helpompaa. Kaikki HttpClientin I / O-sidotut menetelmät ovat asynkronisia, ja voit käyttää samaa HttpClient-ilmentymää myös samanaikaisten pyyntöjen tekemiseen. Seuraava koodinpätkä kuvaa, miten voit työskennellä HttpClientin kanssa.

julkinen asynkronointi Tehtävä GetAuthorsAsync (merkkijono uri)

{

Kirjoittaja kirjoittaja = null;

HttpResponseMessage response = odota client.GetAsync (uri);

jos (response.IsSuccessStatusCode)

    {

author = odota vastausta.Content.ReadAsAsync ();

    }

paluu kirjoittaja;

}

Huomaa, että kun vastauksessa on virhe, HttpClient ei heitä virhettä. Pikemminkin se asettaa IsSuccessStatusCode omaisuus vääräksi. Jos haluat heittää poikkeuksen, jos IsSuccessStatusCode ominaisuus on väärä, voit soittaa Varmista, että SuccessStatusCode menetelmällä vastausesimerkissä alla esitetyllä tavalla.

response.EnsureSuccessStatusCode ();

HttpClient on suunniteltu instantioimaan kerran ja käyttämään sitä uudelleen koko sovelluksen elinkaaren ajan. Sinun ei pitäisi luoda uutta HttpClient-esiintymää jokaiseen pyyntöön, jonka sovelluksesi on käsiteltävä. Jos teet niin, käytettävissä olevat pistorasiat voivat tyhjentyä vilkkaasta liikenteestä johtaenSocketException virheitä. Suositeltava käytäntö on luoda yksi jaettu HttpClient-ilmentymä.