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 REPL.
Antes de profundizar en la escritura de un PizzaController propio, vamos a echar un vistazo al código del ejemplo WeatherController para comprender cómo funciona. En esta sección vamos a ver cómo usa WeatherController 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 un PizzaController propio.
Exploración de WeatherForecastController
Este es el código de la clase WeatherController completa. No se preocupe si aún no tiene sentido, vamos a ir paso a paso.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
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]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.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 mediante enrutamiento, por lo que una solicitud HTTP GET a http://localhost:5000/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 de Razor Pages o MVC en ASP.NET Core, ha usado Controller. No cree un controlador de API web derivándolo de la clase Controller. Controller deriva de ControllerBase y agrega compatibilidad con las vistas, así que sirve para controlar páginas web, no solicitudes de API web.
Atributos de la clase API Controller
Hay dos atributos importantes aplicados a WeatherForecastController, como se muestra a continuación.
[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 [controller] se sustituye por el nombre del controlador (no distingue mayúsculas de minúsculas ni tiene el sufijo Controller). Este controlador controla las solicitudes a http://localhost:5000/weatherforecast.
Nota
La ruta podría contener cadenas estáticas, como en api/[controller]. En este ejemplo, este controlador administraría una solicitud a http://localhost:5000/api/weatherforecast.
Generación de resultados meteorológicos con el método Get()
WeatherForecastController incluye una acción de controlador única designada por el atributo [HttpGet]. Este atributo enruta las solicitudes HTTP GET al método public IEnumerable<WeatherForecast> Get(). Por eso, en el ejercicio anterior, se ha visto que las solicitudes a http://localhost:5000/weatherforecast dieron lugar a la devolución de los resultados meteorológicos. Como va a aprender más adelante en este módulo, hay otras acciones comunes asociadas a una API web que realiza operaciones CRUD (GET, PUT, POST, DELETE), aunque un controlador de API solo necesita implementar una acción de controlador, como se ha visto en este ejemplo.
En este caso, se va a obtener la lista completa de WeatherForecast devueltos. La operación GET también permite recuperar un único elemento pasando un identificador. En ASP.NET, esto se puede lograr con el atributo [HttpGet("{id}")], que se va a implementar en el ejercicio siguiente.
Ahora que ha aprendido los componentes fundamentales de un controlador de API web, está listo para crear un PizzaController propio en el ejercicio siguiente.
Comprobación de conocimientos
¿Necesita ayuda? Consulte nuestra guía de solución de problemas o notifique un problema para enviar comentarios específicos.