0Pricing
C# Academy · Lektion

Ihre erste Minimal API erstellen

Erstellen Sie ein Minimal-API-Projekt, definieren Sie Route-Handler und geben Sie typisierte Ergebnisse mit minimalem Boilerplate-Code zurück.

Ihre erste Minimal API erstellen ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was sind Minimal APIs?

Minimal APIs, die mit .NET 6 eingeführt wurden, ermöglichen den Aufbau von HTTP-Endpunkten mit wenig Boilerplate – ohne Controller und Aktionsattribute, sondern mit direkt in Program.cs definierten Routenhandlern. Sie eignen sich ideal für Microservices und leichtgewichtige APIs.

Die einfachste Minimal API

Eine vollständige HTTP-API in nur wenigen Zeilen. Die Methoden MapGet, MapPost, MapPut und MapDelete definieren Routenhandler für jedes HTTP-Verb.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello, Minimal API!");
app.MapGet("/ping", () => Results.Ok(new { status = "pong" }));

app.Run();
// That's it — no Startup.cs, no controllers

Typisierte Ergebnisse für korrekte HTTP-Antworten

Verwenden Sie Results oder TypedResults für korrekte HTTP-Statuscodes und Inhaltstypen. TypedResults wird für die Inferenz von OpenAPI-Schemas bevorzugt.

app.MapGet("/products/{id}", async (int id, AppDbContext db) =>
{
    var product = await db.Products.FindAsync(id);
    return product is null
        ? Results.NotFound()
        : Results.Ok(product);
});

app.MapPost("/products", async (Product product, AppDbContext db) =>
{
    db.Products.Add(product);
    await db.SaveChangesAsync();
    return Results.Created($"/products/{product.Id}", product);
});

Routenparameter und Query-Strings

Routenparameter werden aus dem URL-Pfad erfasst, Query-String-Parameter automatisch aus der Abfrage gebunden und der Request-Body aus JSON deserialisiert.

// Route param {id} + query param ?includeDeleted
app.MapGet("/orders/{id}", async (
    int id,
    bool includeDeleted = false,
    AppDbContext db) =>
{
    var query = db.Orders.AsQueryable();
    if (!includeDeleted) query = query.Where(o => !o.IsDeleted);
    var order = await query.FirstOrDefaultAsync(o => o.Id == id);
    return order is null ? Results.NotFound() : Results.Ok(order);
});

Dependency Injection in Routenhandlern

Im DI-Container registrierte Services können direkt als Parameter von Routenhandlern injiziert werden. Das Framework löst sie automatisch auf.

builder.Services.AddScoped<ProductService>();

app.MapGet("/products", async (ProductService svc) =>
{
    var products = await svc.GetAllAsync();
    return Results.Ok(products);
});

app.MapDelete("/products/{id}", async (int id, ProductService svc) =>
{
    var deleted = await svc.DeleteAsync(id);
    return deleted ? Results.NoContent() : Results.NotFound();
});

Binden des Request-Bodys

Parameter, die registrierten Services entsprechen, werden injiziert; alle übrigen werden aus dem Request-Body gebunden (standardmäßig aus JSON). Verwenden Sie bei Bedarf explizit [FromBody].

record CreateProductRequest(string Name, decimal Price, int Stock);

app.MapPost("/products", async (
    CreateProductRequest req,
    ProductService svc) =>
{
    var product = await svc.CreateAsync(req.Name, req.Price, req.Stock);
    return TypedResults.Created($"/products/{product.Id}", product);
});

Unterschiedliche Statuscodes zurückgeben

Results stellt Factory-Methoden für alle gängigen HTTP-Antworten bereit. Verwenden Sie diese für semantisch korrekte REST-APIs.

app.MapPut("/products/{id}", async (int id, Product update, AppDbContext db) =>
{
    var existing = await db.Products.FindAsync(id);
    if (existing is null) return Results.NotFound();

    existing.Name  = update.Name;
    existing.Price = update.Price;
    await db.SaveChangesAsync();
    return Results.Ok(existing);
});

// Other useful Results:
// Results.BadRequest("message")
// Results.Conflict()
// Results.UnprocessableEntity(errors)
// Results.Accepted()

Metadaten mit WithName und WithTags hinzufügen

Fügen Sie Endpunkten Metadaten hinzu, um Dokumentation und Routing zu verbessern. Verwenden Sie WithName, WithTags und WithSummary für eine übersichtliche OpenAPI-Ausgabe.

app.MapGet("/products/{id}", GetProduct)
   .WithName("GetProductById")
   .WithTags("Products")
   .WithSummary("Retrieves a product by its ID")
   .Produces<Product>()
   .Produces(404);

static async Task<IResult> GetProduct(int id, AppDbContext db)
{
    var p = await db.Products.FindAsync(id);
    return p is null ? Results.NotFound() : Results.Ok(p);
}

Autorisierung in Minimal APIs

Wenden Sie RequireAuthorization() an, um Endpunkte zu schützen, oder verwenden Sie AllowAnonymous(), um den Schutz zu deaktivieren. Richtlinien funktionieren genauso wie bei Controllern.

builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();

app.UseAuthentication();
app.UseAuthorization();

app.MapGet("/profile", (ClaimsPrincipal user) =>
    Results.Ok(user.Identity!.Name))
   .RequireAuthorization();

app.MapGet("/public", () => "No auth needed")
   .AllowAnonymous();

Organisieren mit statischen Methoden

Bei größeren APIs können Sie Routenhandler in statische Methoden oder Erweiterungsmethoden verschieben, damit Program.cs übersichtlich und gut navigierbar bleibt.

// Extension method groups endpoints by feature
public static class ProductEndpoints
{
    public static void MapProductEndpoints(this WebApplication app)
    {
        app.MapGet("/products",    GetAll);
        app.MapGet("/products/{id}", GetById);
        app.MapPost("/products",   Create);
    }

    private static async Task<IResult> GetAll(AppDbContext db)
        => Results.Ok(await db.Products.AsNoTracking().ToListAsync());

    // ... other handlers
}

// In Program.cs:
app.MapProductEndpoints();

Praxisbeispiel: Vollständige Minimal API für CRUD

Eine vollständige minimale CRUD-API für eine Todo-Ressource – kompakt, testbar und produktionsreif.

app.MapGet("/todos", async (AppDbContext db) =>
    Results.Ok(await db.Todos.AsNoTracking().ToListAsync()));

app.MapGet("/todos/{id}", async (int id, AppDbContext db) =>
{
    var todo = await db.Todos.FindAsync(id);
    return todo is null ? Results.NotFound() : Results.Ok(todo);
});

app.MapPost("/todos", async (Todo todo, AppDbContext db) =>
{
    db.Todos.Add(todo);
    await db.SaveChangesAsync();
    return Results.Created($"/todos/{todo.Id}", todo);
});

app.MapDelete("/todos/{id}", async (int id, AppDbContext db) =>
{
    int n = await db.Todos.Where(t => t.Id == id).ExecuteDeleteAsync();
    return n > 0 ? Results.NoContent() : Results.NotFound();
});

Kurzer Check

Wie erhält ein Routenhandler einer Minimal API einen registrierten DI-Dienst?

Zusammenfassung: Ihre erste Minimal API erstellen

Wichtige Erkenntnisse:

  • MapGet/Post/Put/Delete definieren Routenhandler direkt in Program.cs
  • Verwenden Sie Results / TypedResults für korrekte HTTP-Statuscodes
  • Routen-, Query-, Body- und DI-Parameter werden automatisch gebunden
  • Verwenden Sie RequireAuthorization() und AllowAnonymous() für die Authentifizierung
  • Organisieren Sie große APIs mit Erweiterungsmethoden oder Routengruppen

Häufig gestellte Fragen

Ist die Lektion „Ihre erste Minimal API erstellen“ kostenlos?

Ja — der vollständige Text von „Ihre erste Minimal API erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Ihre erste Minimal API erstellen“?

Erstellen Sie ein Minimal-API-Projekt, definieren Sie Route-Handler und geben Sie typisierte Ergebnisse mit minimalem Boilerplate-Code zurück. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Ihre erste Minimal API erstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ihre erste Minimal API erstellen
  2. Route-Gruppen, Parameter und Validierung
  3. Middleware und Filter in Minimal APIs
  4. OpenAPI, Versionierung und Deployment
← Zurück zu C# Academy