Neuerungen in ASP.NET Core 2.1

In diesem Artikel werden die wichtigsten Änderungen in ASP.NET Core 2.1 hervorgehoben und Links zu relevanter Dokumentation bereitgestellt.

SignalR

SignalR wurde für ASP.NET Core 2.1 umgeschrieben.

ASP.NET Core SignalR bietet eine Reihe von Verbesserungen:

  • Ein vereinfachtes Modell für horizontale Skalierung.
  • Einen neuen JavaScript-Client ohne jQuery-Abhängigkeit.
  • Ein neues kompaktes, binäres Protokoll, das auf MessagePack basiert.
  • Unterstützung für benutzerdefinierte Protokolle.
  • Ein neues Streaming-Antwortmodell.
  • Unterstützung für Clients basierend auf Bare-WebSockets.

Weitere Informationen finden Sie unter ASP.NET Core SignalR.

Razor-Klassenbibliotheken

ASP.NET Core 2.1 erleichtert die Erstellung und Einbeziehung einer Razor-basierten Benutzeroberfläche in einer Bibliothek sowie die mehrere Projekte übergreifende Freigabe. Mit dem neuen Razor SDK können Razor-Dateien in einem Klassenbibliotheksprojekt erstellt werden, das in ein NuGet-Paket gepackt werden kann. Ansichten und Seiten in Bibliotheken werden automatisch ermittelt und können von der App überschrieben werden. Folgen der Integration der Razor-Kompilierung in den Build:

  • Die App wird deutlich schneller gestartet.
  • Schnelle Updates von Razor-Ansichten und -Seiten zur Laufzeit sind weiterhin als Bestandteil eines iterativen Entwicklungsworkflows verfügbar.

Weitere Informationen finden Sie unter Erstellen einer wiederverwendbaren Benutzeroberfläche mithilfe des Razor-Klassenbibliotheksprojekts.

Bibliothek und Gerüst der Identity-Benutzeroberfläche

ASP.NET Core 2.1 stellt ASP.NET Core Identity als Razor-Klassenbibliothek bereit. Apps, die Identity umfassen, können das neue Identity-Gerüst anwenden, um den in der IdentityRazor-Klassenbibliothek enthaltenen Quellcode selektiv hinzuzufügen. Sie sollten Quellcode generieren, um den Code und das Verhalten ändern zu können. Sie können das Gerüst beispielsweise anweisen, den bei der Registrierung verwendeten Code zu generieren. Generierter Code hat Vorrang vor dem gleichen Code in der Razor-Klassenbibliothek Identity.

Apps ohne Authentifizierung können das Gerüst Identity anwenden, um das Paket der Razor-Klassenbibliothek Identity hinzuzufügen. Sie können Code der Klassenbibliothek Identity auswählen, der generiert werden soll.

Weitere Informationen finden Sie unter Gerüst Identity in ASP.NET Core-Projekten.

HTTPS

Durch die verstärkte Ausrichtung auf Sicherheit und Datenschutz ist die Aktivierung von HTTPS für Web-Apps von großer Bedeutung. Die Erzwingung von HTTPS ist im Web zunehmend strenger. Websites, die kein HTTPS verwenden, gelten als unsicher. Browser (Chromium, Mozilla) beginnen zu erzwingen, dass Web-Features über einen sicheren Kontext verwendet werden müssen. Für die DSGVO ist die Verwendung von HTTPS aus Datenschutzgründen erforderlich. Während die Verwendung von HTTPS in der Produktion wichtig ist, können durch die Verwendung von HTTPS in der Entwicklung Probleme bei der Bereitstellung verhindert werden (z.B. unsichere Links). ASP.NET Core 2.1 umfasst eine Reihe von Verbesserungen, die die Verwendung von HTTPS in der Entwicklung und die Konfiguration von HTTPS in der Produktion erleichtern. Weitere Informationen finden Sie unter Erzwingen von HTTPS.

Standardmäßig aktiviert

HTTPS ist jetzt standardmäßig aktiviert, um die Entwicklung sicherer Websites zu erleichtern. Seit Version 2.1 lauscht Kestrel unter https://localhost:5001, wenn ein lokales Entwicklungszertifikat vorhanden ist. Ein Entwicklungszertifikat wird erstellt:

  • Im Rahmen des Eindrucks des .NET Core SDK beim ersten Ausführen, wenn Sie das SDK zum ersten Mal verwenden.
  • Manuell mithilfe des neuen dev-certs-Tools.

Führen Sie dotnet dev-certs https --trust aus, um den Zertifikat vertrauen zu können.

HTTPS-Umleitung und -Erzwingung

Web-Apps müssen in der Regel HTTP und HTTPS lauschen, leiten dann aber sämtlichen HTTP-Verkehr an HTTPS um. In Version 2.1 wurde eine spezielle Middleware für die HTTPS-Umleitung eingeführt, die Umleitungen auf intelligente Weise basierend auf dem Vorhandensein einer Konfiguration oder gebundener Server-Ports durchführt.

Darüber hinaus kann die Verwendung von HTTPS mit dem HTTP Strict Transport Security Protocol (HSTS) erzwungen werden. Das HSTS gibt Browsern die Anweisung, immer über HTTPS auf die Website zuzugreifen. ASP.NET Core 2.1 fügt HSTS-Middleware hinzu, die Optionen für das max. Alter, Unterdomänen und die Preload-Liste des HSTS unterstützt.

Konfiguration für die Produktion

In der Produktion muss HTTPS explizit konfiguriert sein. In Version 2.1 wurde ein Konfigurationsschema für die Konfiguration von HTTPS für Kestrel hinzugefügt. Apps können für folgende Verwendung konfiguriert werden:

DSGVO

ASP.NET Core stellt APIs und Vorlagen für die Erfüllung einiger der Anforderungen der Datenschutz-Grundverordnung (DSGV=) bereit. Weitere Informationen finden Sie unter DSGVO-Unterstützung in ASP.NET Core. Eine Beispiel-App veranschaulicht, wie die meisten DSGVO-Erweiterungspunkte verwendet und getestet werden können. Ferner enthält sie zu den Vorlagen von ASP.NET Core 2.1 hinzugefügte APIs.

Integrationstests

Es wurde ein neues Paket eingeführt, durch das die Testerstellung und -ausführung optimiert wird. Das Paket Microsoft.AspNetCore.Mvc.Testing behandelt folgende Aufgaben:

  • Es kopiert die Abhängigkeitsdatei (*.deps) aus der getesteten App in den Ordner bin des Testprojekts.
  • Es legt das Inhaltsstammelement auf das Projektstammelement der App fest, damit statische Dateien und Seiten/Ansichten bei der Ausführung des Tests gefunden werden.
  • Es stellt die Klasse WebApplicationFactory<TEntryPoint> zur Optimierung des Bootstrappings der getesteten App mit TestServer bereit.

Im folgenden Test wird mithilfe von xUnit überprüft, ob die Indexseite mit einem erfolgreichen Statuscode und mit dem richtigen Content-Type-Header geladen wird:

public class BasicTests
    : IClassFixture<WebApplicationFactory<RazorPagesProject.Startup>>
{
    private readonly HttpClient _client;

    public BasicTests(WebApplicationFactory<RazorPagesProject.Startup> factory)
    {
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task GetHomePage()
    {
        // Act
        var response = await _client.GetAsync("/");

        // Assert
        response.EnsureSuccessStatusCode(); // Status Code 200-299
        Assert.Equal("text/html; charset=utf-8",
            response.Content.Headers.ContentType.ToString());
    }
}

Weitere Informationen finden Sie im Thema Integrationstests.

[ApiController], ActionResult<T>

In ASP.NET Core 2.1 werden neue Programmierungskonventionen hinzugefügt, die eine Erstellung bereinigter und beschreibender Web-APIs vereinfacht. ActionResult<T> ist ein neuer Typ, der hinzugefügt wurde, damit eine App einen Antworttyp oder ein anderes Aktionsergebnis zurückgeben kann (vergleichbar mit IActionResult), während der Antworttyp weiterhin angegeben wird. Das Attribut [ApiController] wurde auch hinzugefügt, um Web-API-spezifischen Konventionen und Verhaltensweisen zuzustimmen.

Weitere Informationen finden Sie unter Erstellen von Web-APIs mit ASP.NET Core.

IHttpClientFactory

ASP.NET Core 2.1 umfasst einen neuen IHttpClientFactory-Dienst, durch den die Konfiguration und der Verbrauch von HttpClient-Instanzen in Apps vereinfacht wird. HttpClient enthält bereits das Konzept, Handler zu delegieren, die für ausgehende HTTP-Anforderungen miteinander verknüpft werden könnten. Die Factory:

  • Sie macht die Registrierung von HttpClient-Instanzen pro benanntem Client intuitiver.
  • Sie implementiert einen Polly-Handler, der zulässt, dass Polly-Richtlinien für „Retry“, „CircuitBreakers“ usw. verwendet werden.

Weitere Informationen finden Sie unter Initiieren von HTTP-Anforderungen.

Kestrel-Libuv-Transportkonfiguration.

Mit dem Release von ASP.NET Core 2.1 basiert der Standardtransport von Kestrel nicht mehr auf Libuv, sondern auf verwalteten Sockets. Weitere Informationen finden Sie unter Implementierung des Webservers Kestrel: Libuv-Transportkonfiguration.

Generator für generische Hosts

Der Generator für generische Hosts (HostBuilder) wurde eingeführt. Dieser Generator kann für Apps verwendet werden, die keine HTTP-Anforderungen verarbeiten (Messaging, Hintergrundaufgaben usw.).

Weitere Informationen finden Sie unter Generischer .NET-Host.

Aktualisierte SPA-Vorlagen

Die Vorlagen der Single-Page-Webanwendung für Angular und React werden aktualisiert, damit die Standardprojektstrukturen und Buildsysteme für die einzelnen Frameworks verwendet werden können.

Die Angular-Vorlage basiert auf der Angular-CLI, während die React-Vorlage auf „create-react-app“ basiert.

Weitere Informationen finden Sie unter:

Razor Pages-Suche nach Razor-Objekten

In Version 2.1 sucht Razor Pages in den folgenden Verzeichnissen in der aufgeführten Reihenfolge nach Razor-Objekten (z. B. Layouts und Teilausführungen):

  1. Im aktuellen Ordner „Pages“.
  2. /Pages/Shared/
  3. /Views/Shared/

Razor Pages in einem Bereich

Razor Pages unterstützen jetzt Bereiche. Erstellen Sie für die Anzeige eines Beispiels für Bereiche eine neue Razor Pages-Web-App mit individuellen Benutzerkonten. Eine Razor Pages-Web-App mit individuellen Benutzerkonten enthält /Areas/Identity/Pages.

MVC-Kompatibilitätsversion

Durch die Methode SetCompatibilityVersion kann eine App Änderungen im Verhalten annehmen oder ablehnen, die in ASP.NET Core MVC 2.1 und höher eingeführt werden und potentiell Fehler verursachen.

Weitere Informationen finden Sie unter Kompatibilitätsversion für ASP.NET Core MVC.

Migrieren von 2.0 zu 2.1

Siehe Migrieren von ASP.NET Core 2.0 zu 2.1.

Zusätzliche Informationen

Die vollständige Liste der Änderungen finden Sie unter ASP.NET Core 2.1 – Anmerkungen zu dieser Version.