ASP.NET Core Web API Controllers

Voltooid

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.

Kennis testen

1.

Wat is het doel van het [ApiController] kenmerk?