Controladores de API web de ASP.NET Core
En el ejercicio anterior se ha creado una aplicación web que proporciona datos de previsiones meteorológicas de ejemplo y luego se ha interactuado con ella en HTTP Read-Eval-Print Loop (REPL).
Antes de profundizar en la escritura de su propia clase PizzaController
, vamos a echar un vistazo al código del ejemplo WeatherController
para comprender cómo funciona. En esta unidad, aprende cómo WeatherController
usa la clase base ControllerBase
y algunos atributos de .NET para compilar una API web funcional en unas docenas de líneas de código. Una vez que comprenda esos conceptos, estará listo para escribir su propia clase PizzaController
.
Este es el código de la clase WeatherController
completa. No se preocupe si aún no tiene sentido. Vayamos paso a paso.
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 clase base: ControllerBase
Un controlador es una clase pública con uno o varios métodos públicos llamados acciones. Por convención, se coloca un controlador en el directorio Controllers de la raíz del proyecto. Las acciones se exponen como puntos de conexión HTTP a través del enrutamiento. Por lo tanto, una solicitud GET
HTTP a https://localhost:{PORT}/weatherforecast
hace que se ejecute el método Get()
de la clase WeatherForecastController
.
Lo primero que hay que tener en cuenta es que esta clase hereda de la clase base ControllerBase
. Esta clase base proporciona una gran cantidad de funcionalidad estándar para controlar solicitudes HTTP, lo que permite centrarse en la lógica de negocios específica de la aplicación.
Nota:
Si tiene experiencia con el desarrollo con Razor Pages o el desarrollo de la arquitectura Modelo-Vista-Controlador (MVC) en ASP.NET Core, ha usado la clase Controller
. No cree un controlador de API web mediante la derivación de la clase Controller
. Controller
se deriva de ControllerBase
y agrega compatibilidad con vistas, por lo que sirve para gestionar páginas web, no solicitudes de API web.
Atributos de la clase API Controller
Se aplican dos atributos importantes a WeatherForecastController
, como se muestra en el código siguiente:
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
[ApiController]
habilita comportamientos fundamentados que facilitan la compilación de API web. Algunos comportamientos incluyen inferencia de origen de parámetros, enrutamiento de atributos como un requisito y mejoras en el control de errores de validación de modelos*.
[Route]
define el patrón de enrutamiento [controller]
. El token se sustituye por el nombre del controlador (no distingue mayúsculas de minúsculas ni tiene el sufijo Controller[controller]
). Este controlador controla las solicitudes a https://localhost:{PORT}/weatherforecast
.
Nota:
La ruta podría contener cadenas estáticas, como en api/[controller]
. En este ejemplo, este controlador controlaría una solicitud a https://localhost:{PORT}/api/weatherforecast
.
Generación de resultados meteorológicos con el método Get()
WeatherForecastController
incluye una acción de controlador único, designada por el atributo [HttpGet(Name = "GetWeatherForecast")]
. Este atributo enruta las solicitudes GET
HTTP al método public IEnumerable<WeatherForecast> Get()
. Como vio en el ejercicio anterior, las solicitudes a https://localhost:{PORT}/weatherforecast
dieron lugar a la devolución de los resultados meteorológicos.
Como aprenderá más adelante en este módulo, otras acciones comunes están asociadas a una API web que realiza operaciones CRUD (GET
, PUT
, POST
, DELETE
). Pero un controlador de API solo debe implementar una acción de controlador.
En este caso, se va a obtener la lista completa de WeatherForecast
elementos devueltos. La operación GET
también permite recuperar un único elemento pasando un identificador. En ASP.NET, puede recuperar un solo elemento mediante el atributo [HttpGet("{id}")]
. Implementará ese atributo en el ejercicio siguiente.
Ahora que ya conoces los componentes fundamentales de un controlador de API web, estás listo para crear tu propia clase PizzaController
.