C# Snabbreferens
  • C# snabbreferens
  • Lathund: Skapa projekt
  • Lathund: koda i konsolen
  • Lathund: koda i WPF
  • Kompilering och publicering
  • Externa resurser
  • Grundläggande
    • Datatyper […]
      • String
      • Tuples
      • Enum
    • Fel
    • Typkonvertering
    • Operatorer
    • Boolska satser
    • Konsolen (Console)
    • If-satser
    • Loopar
    • Listor och arrayer
    • Slump (Random)
    • Strings
    • Metoder
    • Använda bibliotek (using)
    • Delegates, events och lambdas
    • Matematik (Math)
    • Vektorer (Numerics)
    • Datum och tid
    • Try-catch och Exception
    • Namngivning
    • Begrepp
    • Reference vs value types
    • Projektstruktur
    • Dotnet i terminalen
  • Filhantering
    • Filsökvägar
    • Läsa och skriva
    • Filer och mappar
    • Open, close, using
    • Serialisering […]
      • JSON-serialisering
      • XML-serialisering
    • Resursfiler
    • Filformat
      • JSON
  • Klasser och objektorientering
    • Översikt objektorientering
    • Lathund för klassdesign
    • Klasser och instanser
    • Struct
    • Public, private och protected
    • Klassdiagram
    • Klassmetoder
    • Konstruktorer
    • Arv
    • Komposition
    • Inkapsling och properties
    • Static
    • Polymorfism […]
      • Virtual, override
    • Generiska klasser
    • Abstract
    • Interface
    • Attribut
  • Annat
    • RayLib […]
      • Raylib setup
      • Fönster i Raylib
      • Grundläggande grafik
      • Geometriska former
      • Bilder och texturer
        • Texture
        • Image
      • Input
      • Text
      • Rectangle
      • Kollisioner
      • Kamera
      • Ljud
      • Raylib-CSharp*
    • MonoGame […]
      • Monogame-projekt*
      • MCGB Editor*
      • Input*
      • Grafik*
      • Kollisioner
      • Ljud*
    • Nätverk och internet […]
      • CRUD, HTTP och REST
      • URL:er och REST
      • RESTful client*
      • Thunder
      • RESTful server (Minimal API)
        • Swagger och OpenAPI
      • RESTful server (Web API) […]
        • Controllers
        • Models/dataklasser
        • Tester med RESTer
    • Linq
      • Linq-metoder
      • Linq-queries
    • Databaser
      • SQLite-kommandon
      • SQLite och VSCode
      • C# och SQLite
      • Entity Framework Core
    • Threading
      • Thread
      • Task
    • Pseudokod och diagram
    • Windows UI
      • WPF
      • XAML*
      • WinUI*
  • Mjukvara
    • Dotnet SDK
    • Visual Studio Code […]
      • Extensions
      • Inställningar
      • Debugging
      • Snabbkommandon
      • Snippets
      • Felsökning
    • Git & GitHub […]
      • Git-begrepp
    • Andra verktyg
  • Tekniker
    • Begränsa input
    • Game states
    • Gå igenom en array (eller lista)
    • Länkade listor och andra strukturer
    • Ta bort saker ur listan man går igenom
    • 2D-spelbräden
    • Timers
  • CONTRIBUTING
Powered by GitBook
On this page
  • Skapa projektet
  • Ett minimalt projekt
  • WebApplication
  • MapGet(), MapPost(), MapPut() och MapDelete()
  • Parametrar
  • Returnera Objekt som JSON
  • Skicka in nya objekt via POST/PUT och JSON
  • Results
  • Komma åt servern från andra datorer
  • WebApplicationBuilder
  • Använda HTTPS

Was this helpful?

  1. Annat
  2. Nätverk och internet […]

RESTful server (Minimal API)

PreviousThunderNextSwagger och OpenAPI

Last updated 1 year ago

Was this helpful?

Nedan är instruktioner för att skapa en enkel API-server som svarar på GET-anrop.

Skapa projektet

Skapa projektets solution som vanligt, men välj ASP.NET Core Empty som projekttyp istället för Console application.

Ett minimalt projekt

Nedanstående är ett absolut minimalt, enkelt projekt som helt enkelt skickar "Hello World!" till den som skickar en get-request till programmet:

// Skapa en webbapplikation-instans
WebApplication app = WebApplication.Create(args);

// Använd HTTPS när det går
app.UseHttpsRedirection();

// När en GET-request kommer för "/" så svarar servern med det som 
//  returneras från GimmeHello
app.MapGet("/", GimmeHello);

// Kör webbapplikationen
app.Run();

// Metoden som ska köras när någon gör en GET-request
static string GimmeHello()
{
  return "Hello World!";
}

WebApplication

WebApplication-objektet är det som sköter kommunikationen över webben och som ser till att anropa rätt metod när rätt HTTP-request skickas till programmet.

MapGet(), MapPost(), MapPut() och MapDelete()

app.MapGet("/pokemon/", GimmePokemon);

Om någon sedan gör en request till serverns adress, och requesten har metoden GET och inkluderar /pokemon/ (t.ex. https://localhost:7174/pokemon, så kommer det response som skickas tillbaka vara det som returneras från GimmePokemon-metoden.

MapGet kopplar till GET-requests, MapPost till POST-requests, MapPut till PUT-requests och MapDelete till DELETE-requests.

app.MapGet("/hello/", () => "Say hello!");

Parametrar

C#-metoden kan förses med parametervärden via URL:en.

app.MapGet("/double/{num}/", Double);

static string Double(int num)
{
  return (num * 2).ToString();
}

När man i exemplet ovan besöker t.ex. https://localhost:7174/double/7 så blir det 14 som skickas tillbaka som HTTP-response.

Detta används ofta för att välja vilken data som ska skickas – en parameter kan till exempel vara ett unikt ID eller namnet på ett objekt (en användare eller ett dokument). Då skriver man en metod som letar igenom en lista eller en databas efter rätt ID, och returnerar den datan. Ofta skickas då datan som ett objekt.

Returnera Objekt som JSON

Hero.cs
public class Hero
{
  public string Name { get; set; }
  public int Hitpoints { get; set; }
}
app.MapGet("/hero/superman/", GetSuperman);

static Hero GetSuperman()
{
  Hero h = new Hero();
  h.Name = "Superman";
  h.Hitpoints = 100;
  return h;
}

Resultatet om man skickar en GET-request till /hero/superman:

{
  "name": "Superman",
  "hitpoints": 100
}

Skicka in nya objekt via POST/PUT och JSON

app.MapPost("/hero/new/", AddNewHero);

static void AddNewHero(Hero h)
{
  heroList.Add(h);
  Console.WriteLine($"Added hero {} to the list"
}

Results

För att skicka någon annan statuskod än OK, gör så att C#-metoderna returnerar Results.

static IResult GetBatman()
{
  Hero h = new Hero();
  h.Name = "Batman";
  h.Hitpoints = 30;
  return Results.Ok(h);
}

Det finns en hel del olika HTTP-statuskoder, till exempel:

  • Results.Ok – allt gick bra.

  • Results.NotFound – det du frågade efter fanns inte.

  • Results.BadRequest – den request du skickade kunde inte tolkas, eller innehöll fel.

Komma åt servern från andra datorer

Normalt sett kan servern inte kommas åt från andra datorer än den den körs på; den kallas "localhost". För att också kunna komma åt den från andra datorer på samma nätverk, lägg till en URL med wildcard (*):

app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://*:3000");

Ovanstående gör att man kan komma åt servern både genom url:en localhost:3000 (på den lokala datorn) och genom att skriva datorns ip-nummer följt av 3000 (på den lokala datorn eller på någonnannan dator på samma nätverk).

WebApplicationBuilder

Ifall man vill göra något lite mer avancerat med sin WebApplication, så använder man en WebApplicationBuilder för att konstruera den. Buildern fungerar då som en "fabrik" – man skapar den, gör inställningar, och säger sedan åt den att skapa en WebApplication.

WebApplicationBuilder builder = WebApplication.CreateBuilder();

// Lägg till funktionalitet för Swagger/OpenAPI
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// Bygg själva applikationen
WebApplication app = builder.Build();

Använda HTTPS

Om du får problem med att komma åt din server, via webbläsare eller via klienter skrivna i C#, så kan det här behövas.

Börja med att generera och lägga till ett certifikat för lokal utveckling och debuggning. Kör i terminalen:

dotnet dev-certs https
dotnet dev-certs https --trust

Lägg sedan till URL:er för https:

app.Urls.Add("https://localhost:3000");
app.Urls.Add("https://*:3000");

Nu bör HTTPS fungera – åtminstone på din egna dator.

Dessa metoder kopplar en (GET, POST, PUT eller DELETE) och en till en specifik C#-metod. Detta kallas "mapping".

C#-metoden kan vara en statisk metod, en instansmetod eller ett .

Om metoden som mappas returnerar ett objekt, så kommer det objektet till innan det skickas tillbaka som ett .

För att kunna hantera att nya objekt skickas till serverprogrammet, mappa POST eller PUT till en metod som har en parameter av den datatyp -koden ska till.

När en användare då skickar in JSON-kod som i sin HTTP-request till servern, så deserialiseras koden automatiskt till en instans av klassen och resultatet hamnar i parametern när metoden anropas.

Här finns Microsofts officiella snabbreferens.
HTTP-metod
JSON
JSON
deserialiseras
serialiseras
Lambda-uttryck
HTTP-response
body
REST-resurs