ASP.NET Core 웹 API 컨트롤러
이전 연습에서는 샘플 날씨 예보 데이터를 제공하는 웹 애플리케이션을 만든 다음 HTTP Read-Eval-Print Loop(REPL)에서 상호 작용했습니다.
자체 PizzaController
클래스를 작성하는 방법을 살펴보기 전에 WeatherController
샘플의 코드를 살펴보고 작동 방식을 이해해 보겠습니다. 이 단원에서는 WeatherController
가 ControllerBase
기본 클래스 및 몇 가지 .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 컨트롤러를 만들지 마세요. Controller
는 ControllerBase
에서 파생되고 보기에 대한 지원을 추가하므로 웹 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
클래스를 만들 준비가 되었습니다.