Контроллеры веб-API в ASP.NET Core

Завершено

В предыдущем упражнении мы создали веб-приложение, которое предоставляет примеры данных с прогнозом погоды, а затем изучили его через HTTP 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.

Проверьте свои знания

1.

Для чего предназначен атрибут [ApiController]?