REST-szolgáltatás használata a HttpClient használatával

Befejeződött

Számos modern webszolgáltatás implementálja a REST architektúrát. Ez a struktúra lehetővé teszi, hogy egy webszolgáltatás jól definiált végpontokon keresztül tegye elérhetővé a műveleteket és az adatokat. Azok a kérések, amelyeket az ügyfélalkalmazások egy REST-webszolgáltatásnak küldenek adatok lekérésére, módosítására vagy létrehozására vagy törlésére, előre definiált igekészletet használnak. A REST webszolgáltatás szabványos módon válaszol ezekre a kérésekre. Ez a megközelítés megkönnyíti az ügyfélalkalmazások készítését.

A REST-modell a HTTP protokollra épül. A .NET MAUI-alkalmazások az osztály használatával HttpClient küldhetnek kéréseket egy REST-webszolgáltatásnak. Ebben a leckében megismerkedhet HttpClient a REST-webszolgáltatásokkal való interakcióval, és megtudhatja, hogyan használhatja azt.

Mi az a HttpClient-osztály?

HttpClient Egy .NET-osztály, amellyel az alkalmazás HTTP-kéréseket küldhet, és HTTP-válaszokat fogadhat egy REST-webszolgáltatástól. Az URI-k halmaza azonosítja a webszolgáltatás által közzétett erőforrásokat. Az URI egyesíti a webszolgáltatás címét az adott címen elérhető erőforrás nevével.

Az HttpClient osztály feladatalapú API-t használ a teljesítményhez, és hozzáférést biztosít a kérelemüzenetekben szereplő információkhoz, például HTTP-fejlécekhez és állapotkódokhoz, valamint az elküldött és fogadott tényleges adatokat tartalmazó üzenettörzsekhez.

Diagram showing how a client app uses an HttpClient object to send and receive HTTP messages and responses

Az HttpClient osztály elérhető a System.Net.Http névtérben. Az alkalmazások az alapértelmezett konstruktor használatával hozhatnak létre HttpClient objektumokat:

using System.Net.Http;
...

var client = new HttpClient();

CRUD-műveletek végrehajtása HttpClient-objektummal

A REST webszolgáltatás lehetővé teszi, hogy az ügyfél HTTP-parancsok halmazán keresztül hajtson végre műveleteket az adatokon. A HTTP-parancs feladata, hogy jelezze az erőforráson végrehajtandó kívánt műveletet. Számos HTTP-ige létezik, de a négy leggyakoribb a POST, GET, PUTés DELETE. A szolgáltatások implementálhatják ezeket az utasításokat, hogy az ügyfélalkalmazások a létrehozási, olvasási, frissítési és törlési (CRUD) műveletek végrehajtásával felügyelhessék az objektumok életciklusát az alábbiak szerint:

  • Az POST ige azt jelzi, hogy új erőforrást szeretne létrehozni.

  • Az GET ige azt jelzi, hogy le szeretne kérni egy erőforrást.

  • Az PUT ige azt jelzi, hogy frissíteni szeretne egy erőforrást.

  • Az DELETE ige azt jelzi, hogy törölni szeretne egy erőforrást.

Diagram showing the basic CRUD operations that a REST service can implement, including get, post, put and delete.

Új erőforrás létrehozása a HttpClient használatával

Ha új erőforrást szeretne létrehozni a használatával HttpClient, használhatja azt a SendAsync metódust, amely átad egy objektumot HttpRequestMessage .

Ez HttpRequestMessage a webszolgáltatásnak küldött kérés modellezésére szolgál. Megadhatja a HTTP-parancsot, a webszolgáltatás URL-címét, és feltöltheti a HttpRequestMessage.Content tulajdonságon keresztül küldendő hasznos adatokat.

HttpClient client = new HttpClient();

HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, url);
message.Content = JsonContent.Create<Part>(part);

HttpResponseMessage response = await client.SendAsync(message);

Ez a kódrészlet a következő feladatokat hajtja végre:

  • Létrehoz egy úgynevezett ügyfélpéldánytHttpClient, amelyet üzenet küldéséhez használ.
  • Létrehoz egy úgynevezett üzenetpéldánytHttpRequestMessage, amelyet az üzenet modellezéséhez használ. Az üzenet http-igével és URL-címével rendelkezik.
  • A függvény használatával beállítja Content a HttpRequestMessagetulajdonságot JsonContent.Create . Ez a függvény automatikusan szerializálja az alkatrészváltozót a webszolgáltatásnak való küldésre alkalmas JSON-ra.
  • Az objektum használatával küldi el az HttpClient üzenetet. A HttpResponseMessage rendszer egy olyan információt ad vissza, amely olyan információkat tartalmaz, mint az állapotkód és a webszolgáltatás által visszaadott információk.

Erőforrás olvasása a HttpClient használatával

Az erőforrást a korábban ismertetett módszerrel olvashatja el egy webszolgáltatásból, kivéve, ha inicializálja az HttpRequestMessage erőforrást egy HttpMethod.Get. A HttpClient parancsikonokat azonban számos kényelmi módszer biztosítja.

Ha egy erőforrást a következő HTTPClientpéldában látható módon szeretne beolvasni, használja a GetStringAsync metódust:

HttpClient client = new HttpClient();

string text = await client.GetStringAsync("https://...");

A GetStringAsync metódus egy URI-t használ, amely az erőforrásra hivatkozik, és sztringként ad vissza egy választ. A sztringválasz az alkalmazás által kért erőforrás. A válaszadat-formátum a kért szolgáltatás alapértelmezett formátuma, például JSON vagy XML. Az alkalmazás a fejléc hozzáadásával meg tudja mondani a webszolgáltatásnak, hogy egy adott formátumban kell visszaadnia az MediaTypeWithQualityHeaderValue adatokat. Ha például az alkalmazás JSON formátumban kéri az adatok visszaküldését, a következő kódot használhatja:

HttpClient client = new HttpClient();

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

Ebben a példában az eredmény sztringként lesz visszaadva, és csak a válaszüzenet törzsét tartalmazza. A teljes válasz lekéréséhez, beleértve az élőfejeket, a törzset és az állapotkódot, hívja meg a metódust GetAsync . Az adatok objektumként lesznek visszaadva HttpResponseMessage .

Erőforrás frissítése a HttpClient használatával

Ha egy erőforrást put HttpClientparanccsal szeretne frissíteni, használjon egy HttpRequestMessage inicializáltat EGY PUT paranccsal. Az alábbi kód hasonló az új erőforrás létrehozásához szükséges kódhoz:

HttpClient client = new HttpClient();
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Put, url);

message.Content = JsonContent.Create<Part>(part);

HttpResponseMessage response = await client.SendAsync(message);

Megjegyzés:

Az alapvető különbség az idempotencia és PUT az idempotencia közöttPOST. Ha többször is megismételi ugyanazt PUT a kérést, ugyanazt az erőforrást ugyanazokkal az adatokkal frissíti a rendszer, és az eredmény ugyanaz, mintha a kérést csak egyszer küldte volna el. Ha többször is kiadja ugyanazt POST a kérést, az eredmény az lesz, hogy a REST szolgáltatás több példányt hoz létre az erőforrásból.

Erőforrás törlése a HttpClient használatával

Ha törölni szeretne egy erőforrást a DELETE HttpClientparanccsalHttpRequestMessage, inicializált hívással SendAsync:

HttpClient client = new HttpClient();
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Delete, url);

HttpResponseMessage response = await client.SendAsync(message);

A válasz tartalmazza a fejléceket, az állapotkódot és a törölt objektumot.

Kérésből érkező válaszok kezelése

Minden HTTP-kérés válaszüzenetet ad vissza. A válaszban szereplő adatok az alkalmazás által küldött igétől függnek. Egy HTTP-kérés GET választörzse például tartalmazza a kért erőforrás adatait.

A kérés választörzse POST visszaadja a létrehozott erőforrás másolatát, de a kérés választörzsének PUT üresnek kell lennie.

A válaszüzenetben mindig ellenőrizze és kezelje az állapotkódot. Ha ez az állapotkód a 200 tartományba tartozik (200, 201, 202 stb.), akkor a művelet sikeresnek minősül, bár később további információkra lehet szükség.

A 300-as tartomány állapotkódja azt jelzi, hogy a webszolgáltatás átirányíthatta a kérést egy másik címre, esetleg egy másik helyre áthelyezett erőforrás miatt.

A 400 tartomány állapotkódja ügyfél- vagy alkalmazáshibát jelez. A 403-at tartalmazó állapotkód például azt jelenti, hogy a webszolgáltatás megköveteli a felhasználó hitelesítését, de az alkalmazás még nem tette meg. A 404-s állapotkód akkor fordul elő, amikor az alkalmazás nem létező erőforrást próbál elérni.

Az 500-as tartomány állapotkódjai kiszolgálóoldali hibára utalnak, például a szolgáltatás nem érhető el, vagy túl elfoglalt a kérés kezeléséhez.

Az HttpResponseMessage objektumon keresztül HttpClient küldött kérés által visszaadott objektum a különböző állapotkódok kezelésének összetettségének nagy részét elvonhatja. Ez a kódrészlet bemutatja, hogyan ellenőrizheti, hogy a válaszüzenetben szereplő állapotkód sikeres-e, és hogyan kezelheti a valamilyen hibát jelző állapotkódokat.

static readonly HttpClient client = new HttpClient();

...
// Call asynchronous network methods in a try/catch block to handle exceptions.
try
{
    //... Initiate the HttpRequest

    HttpResponseMessage response = await client.SendAsync(msg);
    response.EnsureSuccessStatusCode(); // Check that the status code is in the 200 range. Throw an HttpRequestException if not
    
    string responseBody = await response.Content.ReadAsStringAsync();
    
    ... // Handle the response
}
catch(HttpRequestException e)
{
    ... // Handle any status codes that indicate an error. 
        // The status code is available in the field e.StatusCode
}

Tudáspróba

1.

Melyik HTTP-parancsot használja egy új erőforrás rest webszolgáltatásban való létrehozásához?

2.

Az osztály melyik metódusát HttpResponseMessage kell meghívnia annak ellenőrzéséhez, hogy egy HTTP-kérés sikeres volt-e?"