ASP.NET Core Web API Controllers
In de vorige oefening hebt u een webtoepassing gemaakt die voorbeeldgegevens van de weersvoorspelling biedt en deze vervolgens heeft gebruikt in de HTTP Read-Eval-Print-Lus (REPL).
Voordat u begint met het schrijven van uw eigen PizzaController
klas, gaan we de code in het WeatherController
voorbeeld bekijken om te begrijpen hoe deze werkt. In deze les leert u hoe WeatherController
u de ControllerBase
basisklasse en enkele .NET-kenmerken gebruikt om een functionele web-API te bouwen in een paar tientallen regels code. Nadat u deze concepten hebt begrepen, bent u klaar om uw eigen PizzaController
klas te schrijven.
Hier volgt de code voor de hele WeatherController
klasse. Maak je geen zorgen als het nog niet zinvol is. Laten we het stap voor stap doorlopen.
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();
}
}
De basisklasse: ControllerBase
Een controller is een openbare klasse met een of meer openbare methoden die acties worden genoemd. Volgens de conventie wordt een controller in de map Controllers van de projecthoofdmap geplaatst. De acties worden weergegeven als HTTP-eindpunten via routering. Een HTTP-aanvraag GET
zorgt https://localhost:{PORT}/weatherforecast
er dus voor dat de Get()
methode van de WeatherForecastController
klasse wordt uitgevoerd.
Het eerste wat u moet zien, is dat deze klasse wordt overgenomen van de ControllerBase
basisklasse. Deze basisklasse biedt veel standaardfunctionaliteit voor het verwerken van HTTP-aanvragen, zodat u zich kunt richten op de specifieke bedrijfslogica voor uw toepassing.
Notitie
Als u ervaring hebt met razor Pages of MVC-architectuurontwikkeling (Model View-Controller) in ASP.NET Core, hebt u de Controller
klasse gebruikt. Maak geen web-API-controller door deze af te leiden van de Controller
klasse.
Controller
is afgeleid van ControllerBase
en voegt ondersteuning toe voor weergaven, dus voor het verwerken van webpagina's, niet voor web-API-aanvragen.
Kenmerken van API-controllerklasse
Er worden twee belangrijke kenmerken toegepast op WeatherForecastController
, zoals wordt weergegeven in de volgende code:
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
[ApiController]
maakt geïmachtigd gedrag mogelijk waardoor het eenvoudiger is om web-API's te bouwen. Sommige gedragingen omvatten parameterbrondeductie, kenmerkroutering als vereiste en verbeteringen voor modelvalidatiefoutafhandeling*.
[Route]
definieert het routeringspatroon [controller]
. De naam van de controller (hoofdlettergevoelig, zonder het achtervoegsel controller ) vervangt het [controller]
token. Deze controller verwerkt aanvragen naar https://localhost:{PORT}/weatherforecast
.
Notitie
De route kan statische tekenreeksen bevatten, zoals in api/[controller]
. In dit voorbeeld verwerkt deze controller een aanvraag naar https://localhost:{PORT}/api/weatherforecast
.
Het leveren van weerresultaten met de Get()
methode
WeatherForecastController
bevat één controlleractie die is aangewezen door het [HttpGet(Name = "GetWeatherForecast")]
kenmerk. Met dit kenmerk worden HTTP-aanvragen GET
naar de public IEnumerable<WeatherForecast> Get()
methode gerouteerd. Zoals u in de vorige oefening hebt gezien, zijn aanvragen waardoor https://localhost:{PORT}/weatherforecast
de weerresultaten worden geretourneerd.
Zoals u verderop in deze module leert, worden andere algemene acties gekoppeld aan een web-API waarmee CRUD-bewerkingen (GET
, PUT
, POST
). DELETE
Maar een API-controller hoeft slechts één controlleractie te implementeren.
In dit geval krijgt u de volledige lijst WeatherForecast
met items die worden geretourneerd. Met de GET
bewerking kunt u ook één item ophalen door een id door te geven. In ASP.NET kunt u één item ophalen met behulp van het [HttpGet("{id}")]
kenmerk. In de volgende oefening implementeert u dat kenmerk.
Nu u de fundamentele onderdelen van een web-API-controller kent, kunt u uw eigen PizzaController
klasse maken.