RESTful client*

Snabbstart

Nedanstående exempelkod skapar ett klientobjekt och ett requestobjekt, skickar requesten genom klienten för att få ett response, och deserialiserar response-objektets text till en instans av Pokemon-klassen.

using System.Text.Json;

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://pokeapi.co/api/v2/");
HttpResponseMessage result = client.GetAsync("pokemon/ditto").Result;
Pokemon p = JsonSerializer.Deserialize<Pokemon>(result.Content.ReadAsStringAsync().Result);

// Alternativ till de två sista raderna:

Pokemon p = result.Content.ReadAsAsync<Pokemon>().Result;

HttpClient

En klass som sköter kommunikationen med API-servern.

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://pokeapi.co/api/v2/");

Skapar ett klientobjekt som kommer att skicka requests till PokeAPI.

BaseAddress behöver egentligen inte ändras, men det är praktiskt ifall man ska göra många anrop till url:er som börjar på samma sätt.

GetAsync, PostAsync, PutAsync, DelAsync

Dessa metoder används för att skicka en request till en RESTful API-server och leverera resultatet.

Välj rätt metod:

Metod
HTTP-metod
Aktivitet

PostAsync

POST

Skapa en ny resurs

GetAsync

GET

Hämta data om en resurs

PutAsync

PUT

Ändra en resurs

DelAsync

DELETE

Ta bort en resurs

Metoderna tar alla emot en url-sträng och returnerar en Task. Denna Task ger sedan ifrån sig, som Result, ett HttpResponseMessage.

Post och Put vill också ha en body – alltså det som ska skickas in.

Många metoder här är asynkrona metod. Med andra ord går det att använda await istället för .Result om man är i en asynkron metod.

HttpResponseMessage

Ett HttpResponseMessage-objekt innehåller det svar servern skickat tillbaka.

StatusCode

I response-objektet ingår en StatusCode. Dess datatyp är en Enum som heter HttpStatusCode och finns i biblioteket System.Net. Dess möjliga värden är alla existerande, definierade statuskoder från HTTP-standarden. Till exempel Ok och NotFound.

För att slippa skriva System.Net hela tiden kan du använda ett using-statement högst upp i filen:

Content

Content är det "innehåll" servern svarat med.

Ofta är Content JSON eller XML-format, och då kan informationen deserialiseras till ett objekt antingen via JSON-deserialisering eller XML-deserialisering.

Om det är JSON så finns ett enklare sätt – inkludera System.Net.Http.Json och använd ReadFromJsonAsync istället för ReadAsStringAsync.

Kommunicera med en lokal server

Om du vill anropa en lokal server (localhost) men får ett felmeddelande om ett SSL-fel, så kan du kör denna kod i terminalen för att det ska fungera:

Öppna databas-API:er

Last updated

Was this helpful?