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