kontrolery internetowego interfejsu API platformy ASP.NET Core
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 WeatherForecastController
dwa 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ę.