ASP.NET Core Web API-styrenheter

Slutförd

I föregående övning skapade du ett webbprogram som tillhandahåller väderprognosdata för exempel och interagerade sedan med dem i HTTP Read-Eval-Print Loop (REPL).

Innan du börjar skriva din egen PizzaController klass ska vi titta på koden i WeatherController exemplet för att förstå hur den fungerar. I den här lektionen får du lära dig hur WeatherController du använder basklassen ControllerBase och några .NET-attribut för att skapa ett funktionellt webb-API i några dussin rader med kod. När du har förstått dessa begrepp är du redo att skriva din egen PizzaController klass.

Här är koden för hela WeatherController klassen. Oroa dig inte om det inte är vettigt än. Vi går igenom det steg för steg.

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();
    }
}

Basklassen: ControllerBase

En kontrollant är en offentlig klass med en eller flera offentliga metoder som kallas åtgärder. Enligt konventionen placeras en kontrollant i projektrotens katalog Controllers . Åtgärderna exponeras som HTTP-slutpunkter via routning. En HTTP-begäran GET gör https://localhost:{PORT}/weatherforecast att Get() metoden för WeatherForecastController klassen körs.

Det första du bör notera är att den här klassen ärver från basklassen ControllerBase . Den här basklassen innehåller mycket standardfunktioner för hantering av HTTP-begäranden, så att du kan fokusera på den specifika affärslogik för ditt program.

Kommentar

Om du har erfarenhet av arkitekturutveckling med Razor Pages eller MVC (model-view-controller) i ASP.NET Core har du använt Controller klassen. Skapa inte en webb-API-kontrollant genom att härleda från Controller klassen. Controller härleds från ControllerBase och lägger till stöd för vyer, så det är för att hantera webbsidor, inte webb-API-begäranden.

API-kontrollantklassattribut

Två viktiga attribut tillämpas på WeatherForecastController, enligt följande kod:

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

[ApiController] möjliggör åsiktsbeteenden som gör det enklare att skapa webb-API:er. Vissa beteenden omfattar parameterkällans slutsatsdragning, attributroutning som ett krav och förbättringar av modellverifiering av felhantering*.

[Route] definierar routningsmönstret [controller]. Kontrollantens namn (skiftlägesokänsligt, utan kontrollantsuffixet [controller]) ersätter token. Den här kontrollanten hanterar begäranden till https://localhost:{PORT}/weatherforecast.

Kommentar

Vägen kan innehålla statiska strängar, som i api/[controller]. I det här exemplet skulle den här kontrollanten hantera en begäran till https://localhost:{PORT}/api/weatherforecast.

Tillhandahålla väderresultat med Get() metoden

WeatherForecastController innehåller en enda kontrollantåtgärd som anges av [HttpGet(Name = "GetWeatherForecast")] attributet. Det här attributet dirigerar HTTP-begäranden GET till public IEnumerable<WeatherForecast> Get() metoden. Som du såg i föregående övning returnerades begäranden om att https://localhost:{PORT}/weatherforecast väderresultatet skulle returneras.

Som du lär dig senare i den här modulen associeras andra vanliga åtgärder med ett webb-API som utför CRUD-åtgärder (GET, PUT, POST, DELETE). Men en API-kontrollant behöver bara implementera en kontrollantåtgärd.

I det här fallet får du en fullständig lista över WeatherForecast objekt som returneras. Åtgärden GET gör det också möjligt att hämta ett enskilt objekt genom att skicka in en identifierare. I ASP.NET kan du hämta ett enda objekt med hjälp av attributet [HttpGet("{id}")] . Du implementerar det attributet i nästa övning.

Nu när du känner till de grundläggande komponenterna i en webb-API-kontrollant är du redo att skapa din egen PizzaController klass.

Kontrollera dina kunskaper

1.

Vad är syftet med attributet [ApiController] ?