Contrôleurs d’API web ASP.NET Core

Effectué

Dans l’exercice précédent, vous avez créé une application web qui fournit des exemples de données de prévision météo, puis vous avez interagi avec celle-ci dans la boucle REPL HTTP.

Avant de vous plonger dans l’écriture de notre propre classe PizzaController, jetons un coup d’œil au code de l’exemple WeatherController pour comprendre comment il fonctionne. Dans cette leçon, vous allez découvrir comment WeatherController utilise la classe de base ControllerBase, ainsi que des attributs .NET pour créer une API web fonctionnelle en quelques dizaines de lignes de code. Une fois ces concepts compris, vous êtes prêt à écrire votre propre classe PizzaController.

Voici le code pour la classe WeatherController complète. Ne vous inquiétez pas si vous ne comprenez pas encore tout. Parcourons les étapes pas à pas.

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();
    }
}

La classe de base : ControllerBase

Un contrôleur est une classe publique avec une ou plusieurs méthodes publiques appelées actions. Par convention, un contrôleur est placé dans le répertoire Controllers de la racine du projet. Les actions sont exposées en tant que points de terminaison HTTP par le biais du routage. Par conséquent, une requête HTTP GET pour https://localhost:{PORT}/weatherforecast provoque l’exécution de la méthode Get() de la classe WeatherForecastController.

La première chose à noter est que cette classe hérite de la classe de base ControllerBase. Cette classe de base fournit plusieurs fonctionnalités standard pour la gestion des requêtes HTTP. Vous pouvez ainsi vous concentrer sur la logique métier spécifique pour votre application.

Remarque

Si vous avez de l’expérience avec le développement d’architectures Razor Pages ou MVC (model-view-controller) dans ASP.NET Core, vous avez déjà utilisé la classe Controller. Ne créez pas de contrôleur d’API web en effectuant une dérivation de la classe Controller. Controller dérive de ControllerBase et ajoute la prise en charge des vues. Elle permet donc de gérer des pages web, et non des requêtes d’API web.

Attributs de la classe Controller de l’API

Deux attributs importants sont appliqués à WeatherForecastController, comme illustré dans le code suivant :

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

[ApiController] active des comportements stricts qui facilitent la création d’API web. On compte parmi les comportements les améliorations* de l’inférence des paramètres sources, de l’exigence du routage des attributs et de la gestion des erreurs de validation du modèle.

[Route] définit le modèle de routage [controller]. Le nom du contrôleur (ne respectant pas la casse, sans le suffixe de contrôleur) remplace le jeton [controller]. Ce contrôleur gère les requêtes à https://localhost:{PORT}/weatherforecast.

Notes

La route peut contenir des chaînes statiques, comme dans api/[controller]. Dans cet exemple, ce contrôleur gère une requête à https://localhost:{PORT}/api/weatherforecast.

Fournir des résultats météorologiques avec la méthode Get()

WeatherForecastController comprend une action de contrôleur unique, désignée par l’attribut [HttpGet(Name = "GetWeatherForecast")]. Cet attribut route les requêtes HTTP GET vers la méthode public IEnumerable<WeatherForecast> Get(). Comme cela a été expliqué dans l’exercice précédent, les requêtes vers https://localhost:{PORT}/weatherforecast ont retourné les résultats météo.

Comme vous allez le découvrir plus loin dans ce module, d’autres actions courantes sont associées à une API web qui effectue des opérations CRUD (GET, PUT, POST, DELETE). Toutefois, un contrôleur d’API n’a besoin d’implémenter qu’une seule action de contrôleur.

Dans le cas présent, vous obtenez la liste complète des éléments WeatherForecast retournés. L’opération GET permet également de récupérer un seul élément en passant un identificateur. Dans ASP.NET, vous pouvez récupérer un seul élément à l’aide de l’attribut [HttpGet("{id}")]. Vous allez implémenter cet attribut dans l’exercice suivant.

Vous connaissez à présent les composants fondamentaux d’un contrôleur d’API web, vous êtes désormais prêt à créer votre propre classe PizzaController.

Vérifiez vos connaissances

1.

À quoi sert l’attribut [ApiController] ?