Übung: Hinzufügen eines Controllers

Controller sind öffentliche Klassen mit mindestens einer öffentlichen Methode, die auch Aktion genannt wird. Controllerklassen werden gemäß der Konventionen im Verzeichnis Controllers des Projektstamms platziert. Die Aktionen werden im Web-API-Controller als aufrufbare HTTP-Endpunkte zur Verfügung gestellt.

  1. Führen Sie den folgenden Befehl aus:

    touch ./Controllers/ProductsController.cs
    

    Im Verzeichnis Controllers wird eine leere Klassendatei mit dem Namen ProductsController.cs erstellt. Der Verzeichnisname Controllers entspricht einer Konvention. Der Name stammt aus der MVC-Architektur (Model View Controller), die von der Web-API verwendet wird.

    Hinweis

    An Namen von Controllerklassen wird gemäß der Konventionen Controller angehängt.

  2. Aktualisieren Sie den Datei-Explorer, und fügen Sie den folgenden Code zu Controllers/ProductsController.cs hinzu. Speichern Sie die Änderungen.

    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    using ContosoPets.Api.Data;
    using ContosoPets.Api.Models;
    
    namespace ContosoPets.Api.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class ProductsController : ControllerBase
        {
            private readonly ContosoPetsContext _context;
    
            public ProductsController(ContosoPetsContext context)
            {
                _context = context;
            }
    
            [HttpGet]
            public ActionResult<List<Product>> GetAll() =>
                _context.Products.ToList();
    
            // GET by ID action
    
            // POST action
    
            // PUT action
    
            // DELETE action
        }
    }
    

    Diese Klasse wird von der Basisklasse ControllerBase für einen MVC-Controller ohne Unterstützung der Webbenutzeroberfläche abgeleitet. Die folgenden Attribute definieren ihr Verhalten:

    In der Klassendefinition:

    • stellt die Konstruktorinjektion eine Instanz von ContosoPetsContext für den Controller bereit.
    • Eine HTTP-GET-Aktion namens GetAll wird zum Abrufen aller Produkte erstellt.

    Hinweis

    Die Route kann wie in api/[controller] statische Zeichenfolgen enthalten. In diesem Beispiel kann eine Anforderung an https://localhost:5001/api/products durch diesen Controller erfolgen.

  3. Führen Sie den folgenden Befehl aus, um die App zu erstellen:

    dotnet build --no-restore
    

    Die --no-restore-Option ist enthalten, weil seit dem letzten Build keine NuGet-Pakete hinzugefügt wurden. Der Buildprozess überspringt die Wiederherstellung der NuGet-Pakete und wird ohne Warnungen erfolgreich abgeschlossen. Wenn beim Buildvorgang ein Fehler auftritt, suchen Sie in der Ausgabe nach Informationen zur Problembehandlung.

  4. Starten Sie die Web-API, indem Sie den folgenden Befehl ausführen:

    dotnet ./bin/Debug/netcoreapp3.1/ContosoPets.Api.dll \
        > ContosoPets.Api.log &
    
  5. Führen Sie den folgenden Befehl aus:

    curl -k -s https://localhost:5001/products | jq
    

    Tipp

    Klicken Sie auf Erneut verbinden, wenn ein Timeout für die Cloud Shell-Sitzung auftritt.

    Der folgende JSON-Code wird zurückgegeben:

    [
      {
        "id": 1,
        "name": "Squeaky Bone",
        "price": 20.99
      },
      {
        "id": 2,
        "name": "Knotted Rope",
        "price": 12.99
      }
    ]
    
  6. Beenden Sie alle Prozesse, die von der .NET Core-App generiert wurden:

    kill $(pidof dotnet)
    

In der nächsten Lerneinheit werden Aktionen zur Unterstützung von CRUD-Vorgängen für Produktdaten zu ProductsController hinzugefügt.