Einsteiger-Tutorial · C# · ASP.NET Core · REST API
Wir erstellen eine kleine REST-API, die Produkte als JSON zurückgibt. Du brauchst dafür keine Azure-Ressourcen, keine Datenbank und kein teures Hosting: Alles läuft zunächst auf deinem Rechner.
1. Was du brauchst
Installiere ein aktuell unterstütztes .NET SDK, beispielsweise .NET 10, und einen Editor wie Visual Studio Code oder Visual Studio. Prüfe im Terminal mit dotnet --info, ob die Installation erkannt wird. Für diese Übung brauchst du weder SQL Server noch Entra ID. Beides folgt in späteren Teilen.
2. Das Projekt anlegen
dotnet new web -n MyFirstApi
cd MyFirstApi
dotnet run
Das Template web erzeugt eine sehr kleine ASP.NET-Core-Anwendung ohne unnötige Zusatzdateien. Der Start zeigt dir eine lokale Adresse, beispielsweise http://localhost:5000. Dein Port kann anders aussehen; verwende immer die tatsächlich angezeigte Adresse.
3. Deinen ersten Endpunkt verstehen
Öffne Program.cs und ersetze den Inhalt durch das folgende Beispiel:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var products = new[]
{
new Product(1, "Laptop", 1200m),
new Product(2, "Mouse", 25m)
};
app.MapGet("/api/products", () => Results.Ok(products));
app.MapGet("/api/products/{id:int}", (int id) =>
{
var product = products.FirstOrDefault(p => p.Id == id);
return product is null
? Results.NotFound()
: Results.Ok(product);
});
app.Run();
record Product(int Id, string Name, decimal Price);
WebApplication.CreateBuilder bereitet den Webhost vor. MapGet verbindet eine HTTP-Methode und einen URL-Pfad mit einer C#-Funktion. Results.Ok liefert HTTP 200; Results.NotFound liefert HTTP 404. Das record beschreibt unser Datenmodell. decimal eignet sich für diesen vereinfachten Preiswert besser als double.
4. Die API starten und testen
Speichere die Datei und starte sie mit dotnet run. Öffne die ausgegebene Adresse mit dem Pfad /api/products oder nutze ein Terminal. Ersetze 5000 durch den tatsächlichen Port:
curl -i http://localhost:5000/api/products
curl -i http://localhost:5000/api/products/1
curl -i http://localhost:5000/api/products/999
Die erste Antwort enthält beide Produkte, die zweite nur den Laptop und die dritte den Status 404. Je nach Terminal beziehungsweise PowerShell-Version kann der Aufruf von curl unterschiedlich behandelt werden; mit curl.exe rufst du unter Windows direkt das Programm auf.
5. Was steckt in der JSON-Antwort?
[
{ "id": 1, "name": "Laptop", "price": 1200 },
{ "id": 2, "name": "Mouse", "price": 25 }
]
ASP.NET Core serialisiert unsere C#-Objekte automatisch als JSON. Namen werden in den üblichen Standardeinstellungen in Camel Case ausgegeben: Id wird zu id. Die Rückgabe wird nicht automatisch in einer Datenbank gespeichert; beim Neustart erstellt unser Beispiel die Liste erneut.
6. Wie funktioniert POST?
Eine lesende GET-Anfrage verändert keine Daten. Mit POST kannst du neue Daten an den Server senden. Ergänze vor app.Run() für eine Übung diese Route:
app.MapPost("/api/products", (Product product) =>
{
if (product.Id <= 0 ||
string.IsNullOrWhiteSpace(product.Name) ||
product.Price < 0)
return Results.BadRequest("Invalid product.");
return Results.Created(
$"/api/products/{product.Id}", product);
});
Die Route demonstriert Bindung, einfache Validierung und HTTP 201. Sie speichert den Datensatz bewusst noch nicht. Der Beispielcode ist deshalb kein fertiger CRUD-Service. Füge für echte Anwendungen einen persistenten Datenspeicher und eine eindeutige ID-Vergabe hinzu.
curl -i -X POST http://localhost:5000/api/products \
-H "Content-Type: application/json" \
-d '{"id":3,"name":"Keyboard","price":49.90}'
7. Häufige Fehler
- Connection refused: Der Webserver ist nicht gestartet oder der Port stimmt nicht.
- 404: Der Pfad oder die HTTP-Methode passt nicht zu einer Route.
- 400: JSON oder Werte bestehen die Eingabeprüfung nicht.
- HTTPS-Zertifikatswarnung: Lokale Entwicklungszertifikate müssen gegebenenfalls mit
dotnet dev-certs https --trusteingerichtet werden. - CORS-Fehler im Browser: Eine separate Weboberfläche kann zusätzliche CORS-Einstellungen benötigen; sie ersetzen keine Autorisierung.
8. Was fehlt für den Produktivbetrieb?
Die API ist absichtlich öffentlich und speichert nichts. Für eine echte Anwendung brauchst du Authentifizierung, Autorisierung, gründliche Validierung, Fehlerbehandlung, strukturierte Logs, Tests, API-Versionierung und eine Datenbank. Stelle keine sensiblen Geschäftsdaten über einen öffentlich ungeschützten Endpunkt bereit.
9. Wo kommt Business Central ins Spiel?
Ein AL-HttpClient kann die API aufrufen und JSON verarbeiten. Eine vorgeschaltete Azure Function oder ein eigener .NET-Dienst kann komplexere Prozesse ausführen. Starte jedoch zuerst mit einem einfachen, getesteten GET-Endpunkt, bevor du Authentifizierung und Cloud-Deployment ergänzt.
10. Übungen
- Ergänze ein drittes Produkt und rufe es über seine ID ab.
- Ändere die Antwort auf 404, wenn ein Produkt nicht existiert.
- Ergänze eine Route
/healthmit einem einfachen Statusobjekt. - Teste eine ungültige POST-Anfrage und erkläre den Statuscode.
Kommentare (0)
Noch keine Kommentare. Schreibe den ersten Beitrag zur Diskussion.