1. 프로젝트 만들기

새 프로젝트 만들기 선택

프로젝트 중 ASP .NET Core 웹 API를 선택한다.

프로젝트 명을 넣는다.

추가 정보를 선택 후 만들기를 선택한다.

프로그램을 실행하면 WetherForecastController.cs 파일이 자동 생성된다.

화살표를 눌러 프로그램을 빌드한다.

실행 시 API 문서를 확인할 수 있다. 문서에 있는 API 주소를 호출한다.

API 주소를 입력하면 JSON 형태의 데이터를 확인할 수 있다.
2. API 테스트

도구 > NuGet 패키지 관리자 > 솔루션용 NuGet 패키지 관리를 선택한다.


찾아보기에서 Microsoft.Entity.FrameworkCore.SqlServer 와 Microsoft.EntityFrameworkCore.InMemory 를 설치한다.
Microsoft.Entity.FrameworkCore.SqlServer 와 Microsoft.EntityFrameworkCore.InMemory는 Entity Framework Core (EF Core)에서 제공하는 데이터베이스 제공자(DB Provider)이다. 이 패키지들은 EF Core를 사용해 특정 데이터베이스와 연결하고 상호작용할 수 있도록 지원한다.
Microsoft.Entity.FrameworkCore.SqlServer : Microsoft SQL Server와 연결하기 위한 EF Core 데이터베이스 제공자이다. SQL Server 전용 기능(트랜잭션, 스토어드 프로시저, 데이터 타입 매핑) 등을 지원하며, 데이터베이스 생성 및 마이그레이션을 지원한다.
Microsoft.EntityFrameworkCore.InMemory : 인메모리(In-Memory) 데이터베이스를 지원하는 EF Core 제공자이다. 데이터를 메모리에 저장하므로 테스트 및 개발용으로 주로 사용된다.

프로젝트 마우스 우클릭 > 추가 > 새 항목을 선택 후 TodoItem.cs 를 생성한다.
TodoItem.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace WebServerTest
{
public class TodoItem
{
public int id { get; set; }
public string Name { get; set; }
public string isComplete { get; set; }
}
}
TodoItem.cs 를 다음과 같이 작성한다.
TodoContext.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace WebServerTest
{
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<TodoItem> TodoItems { get; set; }
}
}
그리고 TodoContext.cs 를 생성한다.
TodoContext 는 DbContext를 상속하도록 만든다. DbContext는 데이터베이스와 상호작용을 관리하는 EF Core의 기본 클래스이다. 이는 데이터를 저장, 수정, 삭제, 조회할 수 있는 기능을 제공한다.
그리고 TodoItem모델을 DbSet으로 받을수 있게 TodoItems멤버변수를 만든다.
using Microsoft.EntityFrameworkCore;
using WebServerTest;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList")); // In-Memory 데이터베이스 설정
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
program.cs 클래스를 통해 InMemory 데이터베이스를 사용할 수 있도록 하며, 컨트롤러를 애플리케이션에 추가한다.
3. 컨트롤러 추가

솔루션 탐색기 > Controllers 마우스 우클릭 > 추가 > 컨트롤러를 선택한다.

새 스캐폴트 항목 추가 > 컨트롤러 > Entity Framework를 사용하여 뷰가 포함된 MVC 컨트롤러를 선택한다.

사진처럼 모델 클래스와 DbContext 클래스를 TodoItem 와 TodoContext 를 선택 후 추가를 누른다.

컨트롤러가 생성된다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebServerTest;
namespace WebServerTest.Controllers
{
[Route("api/[controller]")] // API 주소 설정
[ApiController]
public class TodoItemsController : ControllerBase
{
private readonly TodoContext _context;
public TodoItemsController(TodoContext context)
{
_context = context;
}
// GET: api/TodoItems
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()
{
return await _context.TodoItems.ToListAsync();
}
// GET: api/TodoItems/5
[HttpGet("{Id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(int id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem!;
}
// PUT: api/TodoItems/5
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
[HttpPut("{Id}")]
public async Task<IActionResult> PutTodoItem(int Id, TodoItem todoItem)
{
if (Id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TodoItemExists(Id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/TodoItems
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
return CreatedAtAction("GetTodoItem", new { Id = todoItem.Id }, todoItem);
}
// DELETE: api/TodoItems/5
[HttpDelete("{id}")]
public async Task<ActionResult<TodoItem>> DeleteTodoItem(int id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
_context.TodoItems.Remove(todoItem);
await _context.SaveChangesAsync();
return todoItem!;
}
private bool TodoItemExists(int id)
{
return _context.TodoItems.Any(e => e.Id == id);
}
}
}
[Route("api/[controller]")] // API 경로: /api/TodoItems
[ApiController]
컨트롤러에 Route 를 추가해 API 주소를 넣는다. 빌드 시 자동으로 API 주소가 생성된다.
4. PostMan 테스트

프로그램을 빌드한다.

API 문서를 확인할 수 있다.

Postman 을 통해 body 데이터를 입력 후 post 요청을 한다.

그 후 브라우저 혹은 포스트맨으로 GET 요청을 하면 JSON 데이터로 된 값을 확인할 수 있다.

이번엔 DELETE API 를 호출해 데이터를 삭제한다.

다시 GET 요청을 하면 데이터가 삭제된 것을 확인할 수 있다.
이렇게 ASP.NET 으로 간단한 API 서버를 만들어보았다.
Share article