ASP.NET Core-Web-API-Controller

Abgeschlossen

In der vorherigen Übung haben Sie eine Webanwendung erstellt, die Beispieldaten zur Wettervorhersage bereitstellt und dann im HTTP-REPL (read–eval–print-Loop) damit interagiert.

Bevor Sie sich mit dem Schreiben Ihres eigenen PizzaController befassen, werfen wir einen Blick auf den Code im WeatherController-Beispiel, um zu verstehen, wie es funktioniert. In dieser Lerneinheit erfahren Sie, wie WeatherController die Basisklasse ControllerBase und einige .NET-Attribute verwendet, um mit wenigen Dutzend Codezeilen eine funktionierende Web-API zu erstellen. Nachdem Sie sich mit diesen Konzepten vertraut gemacht haben, können Sie nun Ihre eigene PizzaController-Klasse schreiben.

Hier finden Sie den Code für die ganze WeatherController-Klasse: Machen Sie sich keine Sorgen, wenn dies jetzt noch keinen Sinn ergibt. Wir werden den Code Schritt für Schritt durchgehen.

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

Die Basisklasse: ControllerBase

Controller sind öffentliche Klassen mit mindestens einer öffentlichen Methode, die auch Aktion genannt wird. Controller werden gemäß der Konventionen im Verzeichnis Controllers des Projektstamms platziert. Die Aktionen werden über Routing als HTTP-Endpunkte verfügbar gemacht. Daher bewirkt eine HTTP-GET-Anforderung an https://localhost:{PORT}/weatherforecast, dass die Get()-Methode der WeatherForecastController-Klasse ausgeführt wird.

Beachten Sie zunächst, dass diese Klasse von der ControllerBase-Basisklasse erbt. Diese Basisklasse bietet viele Standardfunktionen für die Verarbeitung von HTTP-Anforderungen, sodass Sie sich auf die spezifische Geschäftslogik für Ihre Anwendung konzentrieren können.

Hinweis

Wenn Sie Erfahrung mit Razor Pages oder Entwicklung mithilfe der MVC-Architektur (Model-View-Controller) in ASP.NET Core haben, haben Sie die Controller-Klasse verwendet. Erstellen Sie einen Web-API-Controller nicht durch Ableitung aus der Controller-Klasse. Controller wird von ControllerBase abgeleitet und fügt Unterstützung für Ansichten hinzu. Der Controller übernimmt die Verarbeitung von Webseiten und wird nicht für Web-API-Anforderungen verwendet.

Attribute der API-Controllerklasse

Wie im folgenden Code gezeigt, werden zwei wichtige Attribute auf WeatherForecastController angewendet:

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

[ApiController] ermöglicht optionale Verhaltensweisen, die das Erstellen von Web-APIs erleichtern. Zu diesen Verhaltensweisen gehören der Rückschluss auf Bindungsquellparameter, die Anforderung für das Attributrouting und Verbesserungen an der Verarbeitung von Modellvalidierungsfehlern*.

[Route] definiert das Routingmuster [controller]. Das Token [controller] wird durch den Namen des Controllers ersetzt (ohne Berücksichtigung der Groß-/Kleinschreibung und ohne das Controller-Suffix). Dieser Controller verarbeitet Anforderungen an https://localhost:{PORT}/weatherforecast.

Hinweis

Die Route kann wie in api/[controller] statische Zeichenfolgen enthalten. In diesem Beispiel würde dieser Controller eine Anforderung an https://localhost:{PORT}/api/weatherforecast verarbeiten.

Bereitstellen von Wetterergebnissen mit der Get()-Methode

WeatherForecastController enthält eine einzelne Controlleraktion, die durch das [HttpGet(Name = "GetWeatherForecast")]-Attribut festgelegt wird. Dieses Attribut leitet HTTP-GET-Anforderungen an die public IEnumerable<WeatherForecast> Get()-Methode weiter. Wie Sie in der vorherigen Übung gesehen haben, wurden bei Anforderungen an https://localhost:{PORT}/weatherforecast die Wetterergebnisse zurückgegeben.

Wie Sie später in diesem Modul erfahren werden, hängen andere allgemeine Aktionen mit einer Web-API zusammen, die CRUD-Vorgänge (GET, PUT, POST, DELETE) ausführt. Ein API-Controller muss jedoch nur eine Controlleraktion implementieren.

In diesem Fall erhalten Sie die vollständige Liste der zurückgegebenen WeatherForecast-Elemente. Der GET-Vorgang ermöglicht auch das Abrufen eines einzelnen Elements durch Übergeben eines Bezeichners. In ASP.NET können Sie ein einzelnes Element mithilfe des [HttpGet("{id}")]-Attributs abrufen. Sie implementieren dieses Attribut in der nächsten Übung.

Nachdem Sie nun die grundlegenden Komponenten eines Web-API-Controllers kennen, können Sie Ihre eigene PizzaController-Klasse erstellen.

Überprüfen Sie Ihr Wissen

1.

Welchen Zweck hat das Attribut [ApiController]?