C#/C# FullStack
미니멀 API 만들기
삽사
2023. 8. 10. 09:01
asp.net core 비어있음 프로젝트 생성
Nuget 패키지 설치
Program.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<TodoDB>(options =>
{
options.UseInMemoryDatabase("Todo");
});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapGet("/", () => "Hello DotnetConference 2022 Seoul!");
//할일 목록
app.MapGet("/todo", async (TodoDB db) => await db.TodoList.ToListAsync());
//할일 추가
app.MapPost("/todo", async ([FromBody] Todo todo, [FromServices] TodoDB db, HttpResponse response) =>
{
db.TodoList.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"todo/{todo.Id}", todo);
}).Accepts<Todo>("application/json")
.Produces<Todo>(StatusCodes.Status201Created);
//할일 수정
app.MapPut("/todo", async (int todoId,string title, [FromServices] TodoDB db, HttpResponse response) =>
{
var todo = db.TodoList.SingleOrDefault(s => s.Id == todoId);
if (todo == null) return Results.NotFound();
todo.Title = title;
await db.SaveChangesAsync();
return Results.Created("/todo", todo);
});
//아이디로 할일 조회
app.MapGet("/todo/{id}", async (TodoDB db, int id) =>
await db.TodoList.SingleOrDefaultAsync(s => s.Id == id) is Todo todo ? Results.Ok(todo) : Results.NoContent());
//제목으로 할일 조회
app.MapGet("/todo/search/{query}", (string query, TodoDB db) =>
{
var todoList = db.TodoList.Where(x => x.Title.ToLower().Contains(query.ToLower())).ToList();
return todoList.Count > 0 ? Results.Ok(todoList) : Results.NotFound();
}).Produces<List<Todo>>(StatusCodes.Status200OK)
.Produces(StatusCodes.Status404NotFound);
app.UseSwagger();
app.UseSwaggerUI();
app.Run();
public class Todo
{
[Key]
public int Id { get; set; }
public string? Title { get; set; }
public bool Checked { get; set; }
}
class TodoDB : DbContext
{
public TodoDB(DbContextOptions<TodoDB> options) : base(options) { }
public DbSet<Todo> TodoList => Set<Todo>();
}
참고