Controladors d'API web d'ASP.NET Core

A l'exercici anterior s'ha creat una aplicació web que proporciona dades de previsions meteorològiques d'exemple i després s'hi ha interactuat a HTTP REPL.

Abans d'aprofundir en l'escriptura de la seva pròpia classe PizzaController, farem una ullada al codi de l'exemple WeatherControllerper comprendre com funciona. En aquesta unitat, aprèn com WeatherControllerutilitza la classe base ControllerBasei alguns atributs de .NET per compilar una API web funcional en unes dotzenes de línies de codi. Quan comprengui aquests conceptes, estarà llest per escriure la seva pròpia classe PizzaController.

Aquest és el codi de la classe WeatherControllercompleta. No us preocupeu si encara no té sentit. Anem pas a pas.

C#
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 base:ControllerBase

Un controlador és una classe pública amb un o diversos mètodes públics anomenats accions . Per convenció, es col·loca un controlador al directori Controllers de l'arrel del projecte. Les accions s'exposen com a punts de connexió HTTP mitjançant l'encaminament. Per tant, una sol·licitud GETHTTP https://localhost:{PORT}/weatherforecastfa que s'executi el mètode Get()de la classe WeatherForecastController.

El primer que cal tenir en compte és que aquesta classe hereta de la classe base ControllerBase. Aquesta classe base proporciona una gran quantitat de funcionalitat estàndard per controlar sol·licituds HTTP, cosa que permet centrar-se en la lògica de negocis específica de laplicació.

Nota

Si teniu experiència amb el desenvolupament amb Razor Pages o el desenvolupament de l'arquitectura Model-Vista-Controlador (MVC) a ASP.NET Core, heu fet servir la classe Controller. No creeu un controlador d'API web mitjançant la derivació de la classe Controller. Controlleres deriva de ControllerBasei afegeix compatibilitat amb vistes, de manera que serveix per gestionar pàgines web, no sol·licituds dAPI web.

Atributs de la classe API Controller

S'apliquen dos atributs importants a WeatherForecastController, com es mostra al codi següent:

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

[ApiController]habilita comportaments fonamentats que faciliten la compilació d'API web. Alguns comportaments inclouen inferència d'origen de paràmetres , encaminament d'atributs com un requisit i millores en el control d'errors de validació de models *.

[Route]defineix el patró d'encaminament [controller]. El token se substitueix pel nom del controlador (no distingeix majúscules de minúscules ni té el sufix Controller [controller]). Aquest controlador controla les sol·licituds a https://localhost:{PORT}/weatherforecast.

Nota

La ruta podria contenir cadenes estàtiques, com a api/[controller]. En aquest exemple, aquest controlador controlaria una sol·licitud a https://localhost:{PORT}/api/weatherforecast.

Generació de resultats meteorològics amb el mètodeGet()

WeatherForecastControllerinclou una acció de controlador únic, designada per l'atribut [HttpGet(Name = "GetWeatherForecast")]. Aquest atribut encamina les sol·licituds GETHTTP al mètode public IEnumerable<WeatherForecast> Get(). Com va veure l'exercici anterior, les sol·licituds van https://localhost:{PORT}/weatherforecastdonar lloc a la devolució dels resultats meteorològics.

Com aprendrà més endavant en aquest mòdul, altres accions comunes estan associades a una API web que realitza operacions CRUD ( GET, PUT, POST, DELETE). Però un controlador d'API només ha d'implementar una acció de controlador.

En aquest cas, s'obtindrà la llista completa de WeatherForecasttornats. L'operació GETtambé permet recuperar un únic element passant un identificador. A ASP.NET, podeu recuperar un sol element mitjançant l'atribut [HttpGet("{id}")]. Implementarà aquest atribut a l'exercici següent.

Ara que heu après els components fonamentals d'un controlador d'API web, està llest per crear la seva pròpia classe PizzaController.


Mòdul completat:

Següent