C# Minimal API 템플릿
.NET 8+ 환경에서 빠르고 가볍게 API 엔드포인트를 구축할 수 있는 Minimal API 패턴입니다.
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.OpenApi;
var builder = WebApplication.CreateBuilder(args);
// 서비스 등록 (DI)
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// 미들웨어 설정
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
// 가상 데이터베이스
var todos = new List<Todo>();
// 그룹화된 라우트 정의
var todoItems = app.MapGroup("/todoitems");
todoItems.MapGet("/", () => todos);
todoItems.MapGet("/{id}", Results<Ok<Todo>, NotFound> (int id) =>
todos.FirstOrDefault(t => t.Id == id) is Todo todo
? TypedResults.Ok(todo)
: TypedResults.NotFound());
todoItems.MapPost("/", (Todo todo) =>
{
todos.Add(todo);
return TypedResults.Created($"/todoitems/{todo.Id}", todo);
});
todoItems.MapPut("/{id}", (int id, Todo inputTodo) =>
{
var todo = todos.FirstOrDefault(t => t.Id == id);
if (todo is null) return Results.NotFound();
todo.Name = inputTodo.Name;
todo.IsComplete = inputTodo.IsComplete;
return Results.NoContent();
});
todoItems.MapDelete("/{id}", (int id) =>
{
var todo = todos.FirstOrDefault(t => t.Id == id);
if (todo is null) return Results.NotFound();
todos.Remove(todo);
return Results.NoContent();
});
app.Run();
public class Todo
{
public int Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}