ASP.NET Core 웹 API 컨트롤러

완료됨

이전 연습에서는 샘플 날씨 예보 데이터를 제공하는 웹 애플리케이션을 만든 다음 HTTP Read-Eval-Print Loop(REPL)에서 상호 작용했습니다.

자체 PizzaController 클래스를 작성하는 방법을 살펴보기 전에 WeatherController 샘플의 코드를 살펴보고 작동 방식을 이해해 보겠습니다. 이 단원에서는 WeatherControllerControllerBase 기본 클래스 및 몇 가지 .NET 특성을 사용하여 수십 라인의 코드로 기능 웹 API를 빌드하는 방법을 학습합니다. 이러한 개념을 이해하면 고유한 PizzaController 클래스를 작성할 준비가 됩니다.

전체 WeatherController 클래스의 코드는 다음과 같습니다. 아직 이해가 되지 않더라도 걱정하지 마세요. 단계별로 살펴보겠습니다.

using Microsoft.AspNetCore.Mvc;

namespace ContosoPizza.Controllers;

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

기본 클래스: ControllerBase

Controller는 actions라는 하나 이상의 공용 메서드가 있는 공용 클래스입니다. 규칙에 따라 컨트롤러는 프로젝트 루트의 Controllers 디렉터리에 배치됩니다. 작업은 라우팅을 통해 HTTP 엔드포인트로 노출됩니다. 따라서 https://localhost:{PORT}/weatherforecast에 대한 HTTP GET 요청은 WeatherForecastController 클래스의 Get() 메서드가 실행되도록 합니다.

가장 기억해야 할 점은 이 클래스가 ControllerBase 기본 클래스에서 상속된다는 것입니다. 이 기본 클래스는 HTTP 요청을 처리하기 위한 여러 표준 기능을 제공하므로 애플리케이션의 특정 비즈니스 논리에 집중할 수 있습니다.

참고 항목

ASP.NET Core에서 Razor Pages 또는 MVC(모델 보기 컨트롤러) 아키텍처 개발 경험이 있는 경우 Controller 클래스를 사용한 것입니다. Controller 클래스에서 파생된 Web API 컨트롤러를 만들지 마세요. ControllerControllerBase에서 파생되고 보기에 대한 지원을 추가하므로 웹 API 요청이 아니라 웹 페이지를 처리하기 위한 것입니다.

API 컨트롤러 클래스 특성

다음 코드와 같이 두 가지 중요한 특성이 WeatherForecastController에 적용됩니다.

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

[ApiController]는 웹 API를 쉽게 빌드할 수 있는 독특한 동작을 사용합니다. 이러한 동작에는 매개 변수 소스 추론, 요구 사항으로 특성 라우팅, 모델 유효성 검사 오류 처리 기능 향상이 포함됩니다*.

[Route]는 라우팅 패턴 [controller]를 정의합니다. 컨트롤러 이름(대/소문자 구분, Controller 접미사 없음)이 [controller] 토큰을 바꿉니다. 이 컨트롤러는 https://localhost:{PORT}/weatherforecast에 대한 요청을 처리합니다.

참고

경로는 api/[controller]에서와 같이 정적 문자열을 포함할 수 있습니다. 이 예에서 이 컨트롤러는 https://localhost:{PORT}/api/weatherforecast에 대한 요청을 처리합니다.

Get() 메서드를 사용하여 날씨 결과 제공

WeatherForecastController에는 [HttpGet(Name = "GetWeatherForecast")] 속성으로 지정된 단일 컨트롤러 작업이 포함됩니다. 이 속성은 HTTP GET 요청을 public IEnumerable<WeatherForecast> Get() 메서드로 라우팅합니다. 이전 연습에서 본 것처럼 https://localhost:{PORT}/weatherforecast에 대한 요청으로 인해 날씨 결과가 반환되었습니다.

이 모듈의 뒷부분에서 배우겠지만 다른 일반적인 작업은 CRUD 작업(GET, PUT, POST, DELETE)을 수행하는 웹 API와 연결됩니다. 그러나 API 컨트롤러는 컨트롤러 작업을 하나만 구현하면 됩니다.

이 경우 WeatherForecast 항목의 전체 목록이 반환됩니다. GET 작업을 사용하면 식별자를 전달하여 단일 항목을 검색할 수도 있습니다. ASP.NET에서는 [HttpGet("{id}")] 특성을 사용하여 단일 항목을 검색할 수 있습니다. 다음 연습에서 이 특성을 구현할 것입니다.

이제 웹 API 컨트롤러의 기본 구성 요소를 알았으므로 자신만의 PizzaController 클래스를 만들 준비가 되었습니다.

지식 점검

1.

[ApiController] 특성의 용도는 무엇인가요?