Övning - Skapa data med POST
🎯 Vad du kommer lära dig
- Att skapa ett C-Sharp-objekt för att skicka som data.
- Att serialisera ett C-Sharp-objekt till en JSON-sträng.
- Att använda
PostAsyncför att skicka data till ett API. - Att läsa och hantera svaret från ett POST-anrop.
🧩 Uppgift
Din uppgift är att skapa ett nytt “album” på JSONPlaceholder. Du ska skicka en titel och ett userId till API:et. När servern har skapat albumet kommer den att svara med det objekt du skickade, plus ett nytt id som den har genererat.
Du ska sedan läsa detta svar och skriva ut det nya ID:t.
Adressen (endpoint) för att skapa album är: https://jsonplaceholder.typicode.com/albums
JSON-datan du skickar ska se ut ungefär så här:
{
"userId": 15,
"title": "Min nya skiva"
}
🚀 Steg-för-steg-guide
- Skapa projektet: Skapa en ny C# konsolapplikation.
- Skapa en DTO-klass: Skapa en klass
Album. Den ska ha egenskapernaUserId(int),Title(string) ochId(int?).Idska vara en nullable int (int?) eftersom vi inte har något ID när vi skickar iväg datan, men vi förväntar oss ett i svaret. - Skapa objektet: I
Main, skapa en ny instans av dinAlbum-klass. SättUserIdtill valfritt nummer ochTitletill en valfri text. - Serialisera & Paketera: Använd
JsonSerializer.Serializeför att göra om ditt objekt till en JSON-sträng. Skapa sedan ettStringContent-objekt från strängen. - Skicka datan: Använd
client.PostAsyncför att skicka dittStringContenttill URL:en. - Hantera svaret: Kontrollera att
response.IsSuccessStatusCodeärtrue. Läs sedan innehållet från svaret medresponse.Content.ReadAsStringAsync(). - Presentera resultatet: Deserialisera svars-strängen tillbaka till ett
Album-objekt och skriv ut det nyaIdsom servern genererade.
💡 Tips
- Glöm inte att ange
Encoding.UTF8och"application/json"när du skapar dittStringContent-objekt. Servern behöver veta vad du skickar för något!
💡 Klicka här för facit
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
public class Album
{
public int UserId { get; set; }
public string Title { get; set; }
public int? Id { get; set; }
}
public class Program
{
public static async Task Main(string[] args)
{
using var client = new HttpClient();
var newAlbum = new Album
{
UserId = 22,
Title = "Resan till C-Sharp-Land"
};
string jsonData = JsonSerializer.Serialize(newAlbum);
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
string url = "https://jsonplaceholder.typicode.com/albums";
try
{
HttpResponseMessage response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine("Album skapat! Svar från servern:");
Console.WriteLine(responseBody);
Album? createdAlbum = JsonSerializer.Deserialize<Album>(responseBody);
if (createdAlbum?.Id is not null)
{
Console.WriteLine($"\nAlbumet fick ID: {createdAlbum.Id}");
}
}
else
{
Console.WriteLine($"Misslyckades! Statuskod: {response.StatusCode}");
}
}
catch (HttpRequestException e)
{
Console.WriteLine($"Nätverksfel: {e.Message}");
}
}
}