kontrolery internetowego interfejsu API platformy ASP.NET Core

Ukończone

W poprzednim ćwiczeniu utworzono aplikację internetową, która udostępnia przykładowe dane prognozy pogody, a następnie wchodziła z nią w interakcję w pętli HTTP Read-Eval-Print Loop (REPL).

Zanim przejdziesz do pisania własnej PizzaController klasy, przyjrzyjmy się kodowi w przykładzie WeatherController , aby zrozumieć, jak działa. W tej lekcji dowiesz się, jak WeatherController używa klasy bazowej ControllerBase i kilku atrybutów platformy .NET do tworzenia funkcjonalnego internetowego interfejsu API w kilku tuzinach wierszy kodu. Po zapoznaniu się z tymi pojęciami możesz napisać własną PizzaController klasę.

Oto kod całej WeatherController klasy. Nie martw się, jeśli jeszcze nie ma sensu. Przejdźmy przez to krok po kroku.

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

Klasa bazowa: ControllerBase

Kontroler jest klasą publiczną z co najmniej jedną publiczną metodą znaną jako akcje. Zgodnie z konwencją kontroler jest umieszczany w katalogu kontrolerów głównego projektu. Akcje są widoczne jako punkty końcowe HTTP za pośrednictwem routingu. Dlatego żądanie https://localhost:{PORT}/weatherforecast HTTP GET powoduje wykonanie Get() metody WeatherForecastController klasy.

Pierwszą rzeczą, którą należy zauważyć, jest to, że ta klasa dziedziczy z klasy bazowej ControllerBase . Ta klasa podstawowa zapewnia znacznie standardowe funkcje do obsługi żądań HTTP, dzięki czemu można skupić się na określonej logice biznesowej dla aplikacji.

Uwaga

Jeśli masz doświadczenie z programowaniem architektury Razor Pages lub model-view-controller (MVC) w ASP.NET Core, użyto Controller klasy . Nie twórz kontrolera internetowego interfejsu API pochodnego od klasy Controller. Controller program pochodzi z ControllerBase i dodaje obsługę widoków, dlatego obsługuje strony internetowe, a nie żądania internetowego interfejsu API.

Atrybuty klasy kontrolera interfejsu API

Do elementu są stosowane WeatherForecastControllerdwa ważne atrybuty, jak pokazano w poniższym kodzie:

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

[ApiController]umożliwia opiniowanie zachowań, które ułatwiają tworzenie internetowych interfejsów API. Niektóre zachowania obejmują wnioskowanie źródła parametrów, routing atrybutów jako wymaganie i ulepszenia obsługibłędów walidacji modelu*.

Atrybut [Route] definiuje wzorzec routingu [controller]. Nazwa kontrolera (bez uwzględniania wielkości liter bez sufiksu kontrolera ) zastępuje [controller] token. Ten kontroler obsługuje żądania do https://localhost:{PORT}/weatherforecast.

Uwaga

Trasa może zawierać ciągi statyczne, jak w pliku api/[controller]. W tym przykładzie ten kontroler obsłuży żądanie do https://localhost:{PORT}/api/weatherforecast.

Dostarczanie wyników pogodowych za pomocą Get() metody

WeatherForecastController zawiera jedną akcję kontrolera wyznaczoną [HttpGet(Name = "GetWeatherForecast")] przez atrybut . Ten atrybut kieruje żądania HTTP GET do public IEnumerable<WeatherForecast> Get() metody . Jak pokazano w poprzednim ćwiczeniu, żądania, które https://localhost:{PORT}/weatherforecast spowodowały zwrócenie wyników pogodowych.

W dalszej części tego modułu inne typowe akcje są skojarzone z internetowym interfejsem API, który wykonuje operacje CRUD (GET, PUT, POST, DELETE). Jednak kontroler interfejsu API musi zaimplementować tylko jedną akcję kontrolera.

W takim przypadku otrzymujesz pełną listę WeatherForecast zwracanych elementów. Operacja GET umożliwia również pobieranie pojedynczego elementu przez przekazanie identyfikatora. W ASP.NET można pobrać pojedynczy element przy użyciu atrybutu [HttpGet("{id}")] . Ten atrybut zostanie zaimplementowany w następnym ćwiczeniu.

Teraz, gdy znasz podstawowe składniki kontrolera internetowego interfejsu API, możesz utworzyć własną PizzaController klasę.

Sprawdź swoją wiedzę

1.

Jaki jest cel atrybutu [ApiController] ?