C#/C# FullStack
[ASP.NET core] TIL 깔끔한 ApiController
삽사
2024. 6. 2. 17:28
using ContosoPizza.Models;
using ContosoPizza.Services;
using Microsoft.AspNetCore.Mvc;
namespace ContosoPizza.Controllers;
[ApiController]
[Route("[controller]")]
public class PizzaController : ControllerBase
{
public PizzaController()
{
}
// GET all action
public ActionResult<List<Pizza>> GetAll() => PizzaService.GetAll();
// GET by id action
[HttpGet("{id}")]
public ActionResult<Pizza> Get(int id)
{
var pizza = PizzaService.Get(id);
if (pizza == null)
{
return NotFound();
}
return pizza;
}
// Post action
[HttpPost]
public IActionResult Create(Pizza pizza)
{
PizzaService.Add(pizza);
return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}
// PUT action
[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
if (id != pizza.Id)
return BadRequest();
var existingPizza = PizzaService.Get(id);
if (existingPizza is null)
return NotFound();
PizzaService.Update(pizza);
return NoContent();
}
// DELETE action
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var pizza = PizzaService.Get(id);
if (pizza is null)
return NotFound();
PizzaService.Delete(id);
return NoContent();
}
}
POST 효청 후에 결과를 돌려주는 부분이 굉장히 깔끔하게 구현되어있다.
나중에 프로젝트만들 때 적용해봐야겠다.
ActionResult vs IActionResult
ActionResult<T> 형식
- 돌려줄 타입이 명확히 정해져있을 때. 주로 Get 요청에서 쓴다.
- ActionResult<T> 사용 시, T가 참조 타입인 경우 null을 반환할 수 있으며, T?를 별도로 사용할 필요는 없다.
- null 반환가능성이 있는 경우, 체크에서 NotFound()를 반환하는것이 좋다.
IActionResult
- 반환 형식이 좀더 다양할 경우에 쓴다. 다양한 종류의 응답을 동적으로 반환할 수 있다. 예를 들어, 성공, 에러, 리다이렉션 등 다양한 HTTP 응답을 하나의 액션에서 처리할 수 있다. 주로 Post, Put, Delete 요청에 쓴다.
참고 https://learn.microsoft.com/ko-kr/training/modules/build-web-api-aspnet-core/
ASP.NET Core 컨트롤러를 사용하여 웹 API 만들기 - Training
CRUD(만들기, 읽기, 업데이트, 삭제) 작업을 지원하는 ASP.NET Core 컨트롤러를 사용하여 RESTful 서비스를 만듭니다.
learn.microsoft.com