ASP.NET core kontrolery webového rozhraní API

Dokončeno

V předchozím cvičení jste vytvořili webovou aplikaci, která poskytuje ukázková data předpovědi počasí, a pak s nimi pracovala ve smyčce HTTP Read-Eval-Print (REPL).

Než se pustíte do psaní vlastní PizzaController třídy, podívejme se na kód v ukázce WeatherController , abyste pochopili, jak funguje. V této lekci se dozvíte, jak WeatherController pomocí ControllerBase základní třídy a několika atributů .NET sestavit funkční webové rozhraní API v několika desítkách řádků kódu. Po pochopení těchto konceptů jste připraveni napsat vlastní PizzaController třídu.

Tady je kód pro celou WeatherController třídu. Nedělejte si starosti, pokud to ještě nemá smysl. Pojďme si to projít krok za krokem.

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

Základní třída: ControllerBase

Kontroler je veřejná třída s jednou nebo více veřejnými metodami známými jako akce. Podle konvence se kontroler umístí do kořenového adresáře kontrolerů projektu. Tyto akce se zveřejňují jako koncové body HTTP prostřednictvím směrování. Požadavek HTTP GET , který https://localhost:{PORT}/weatherforecast způsobí Get() spuštění metody WeatherForecastController třídy.

První věc, kterou si můžete všimnout, je, že tato třída dědí ze ControllerBase základní třídy. Tato základní třída poskytuje mnoho standardních funkcí pro zpracování požadavků HTTP, takže se můžete zaměřit na konkrétní obchodní logiku pro vaši aplikaci.

Poznámka:

Pokud máte zkušenosti s vývojem architektury Razor Pages nebo architektury MVC (model-view-controller) v ASP.NET Core, použili Controller jste třídu. Nevytvářejte kontroler webového rozhraní API odvozením z třídy Controller. Controller je odvozena od ControllerBase zobrazení a přidává podporu zobrazení, takže se jedná o zpracování webových stránek, nikoli požadavků webového rozhraní API.

Atributy třídy kontroleru rozhraní API

Na , jak je znázorněno v následujícím kódu, se použijí WeatherForecastControllerdva důležité atributy:

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

[ApiController]umožňuje názorné chování, které usnadňuje vytváření webových rozhraní API. Mezi některá chování patří odvození zdroje parametrů, směrování atributů jako požadavek a vylepšení zpracování chyb při ověřovánímodelu*.

[Route] definuje vzor směrování [controller]. Název kontroleru (nerozlišuje malá a velká písmena bez přípony kontroleru ) nahradí [controller] token. Tento kontroler zpracovává požadavky na https://localhost:{PORT}/weatherforecast.

Poznámka:

Trasa může obsahovat statické řetězce, například v api/[controller]. V tomto příkladu by tento kontroler zpracovával požadavek na https://localhost:{PORT}/api/weatherforecast.

Poskytnutí výsledků počasí metodou Get()

WeatherForecastController obsahuje jednu akci kontroleru určenou atributem [HttpGet(Name = "GetWeatherForecast")] . Tento atribut směruje požadavky HTTP GET na metodu public IEnumerable<WeatherForecast> Get() . Jak jste viděli v předchozím cvičení, žádosti o https://localhost:{PORT}/weatherforecast vrácení výsledků počasí.

Jak se později v tomto modulu dozvíte, další běžné akce jsou přidružené k webovému rozhraní API, které provádí operace CRUD (GET, PUT, POST). DELETE Kontroler rozhraní API ale musí implementovat jenom jednu akci kontroleru.

V tomto případě získáte úplný seznam vrácených WeatherForecast položek. Operace GET také umožňuje načtení jedné položky předáním identifikátoru. V ASP.NET můžete načíst jednu položku pomocí atributu [HttpGet("{id}")] . Tento atribut implementujete v dalším cvičení.

Teď, když znáte základní komponenty kontroleru webového rozhraní API, jste připraveni vytvořit vlastní PizzaController třídu.

Kontrola znalostí

1.

Jaký je účel atributu [ApiController] ?