Контроллеры веб-API в ASP.NET Core
В предыдущем упражнении вы создали веб-приложение, которое предоставляет примеры данных прогноза погоды, а затем взаимодействуете с ним в цикле ЧТЕНИЯ-Eval-Print (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
Контроллер представляет собой открытый класс с одним или несколькими открытыми методами, которые называются действиями. По соглашению контроллер помещается в корневом каталоге проекта в подкаталоге Controllers. Эти действия предоставляются в виде конечных точек HTTP через механизм маршрутизации. Поэтому HTTP-запрос GET
к https://localhost:{PORT}/weatherforecast
вызывает выполнение метода Get()
из класса WeatherForecastController
.
Первое, что можно отметить: этот класс наследует от базового класса ControllerBase
. Этот базовый класс предоставляет много стандартных функций для обработки HTTP-запросов, поэтому вы можете сосредоточиться на конкретной бизнес-логике приложения.
Примечание.
Если у вас есть опыт разработки архитектуры Razor Pages или MVC (Модель — представление — контроллер) в ASP.NET Core, значит вы уже использовали класс Controller
. Не создавайте контроллер веб-API путем наследования от класса Controller
. Controller
наследует от класса ControllerBase
и добавляет поддержку представлений, поэтому он предназначен для веб-страниц, а не запросов к веб-API.
Атрибуты класса для контроллера API
К WeatherForecastController
применяются два важных атрибута, которые представлены в следующем коде:
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
[ApiController]
включает поведение на основе мнений, которое упрощает создание веб-API. Некоторые действия включают вывод источника параметров, маршрутизацию атрибутов в качестве требования и улучшения обработкиошибок проверки модели*.
[Route]
определяет шаблон маршрутизации [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
возвращение результатов погоды.
Как вы узнаете позже в этом модуле, другие распространенные действия связаны с веб-API, выполняющим операции CRUD (GET
, PUT
, , POST
). DELETE
Но контроллер API должен реализовывать только одно действие контроллера.
В этом случае вы получаете полный WeatherForecast
список возвращаемых элементов. Операция GET
также позволяет получить один элемент путем передачи идентификатора. В ASP.NET можно получить один элемент с помощью атрибута [HttpGet("{id}")]
. Этот атрибут вы реализуете в следующем упражнении.
Теперь, когда вы знаете основные компоненты контроллера веб-API, вы готовы создать собственный PizzaController
класс.