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 Scale-out-Modell.
  • 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 auf Basis reiner WebSockets.

Weitere Informationen finden Sie unter ASP.NET Core SignalR.

Razor Klassenbibliotheken

ASP.NET Core 2.1 erleichtert es, eine auf Razor basierende Benutzeroberfläche in einer Bibliothek zu erstellen und einzubinden sowie sie projektübergreifend in mehreren Projekten zu verwenden. 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. Durch die Integration der RazorKompilierung in den Build-Prozess:

  • 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 Wiederverwendbare Razor-Benutzeroberfläche in Klassenbibliotheken mit ASP.NET Core.

Identity UI-Bibliothek und Grundgerüst

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 (RCL) 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, die keine Authentifizierung enthalten, können den Identity-Scaffolder verwenden, um das RCL-Paket Identity hinzuzufügen. Sie haben die Möglichkeit, den mit Identity zu generierenden Code auszuwählen.

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

HTTPS

Mit dem verstärkten Fokus auf Sicherheit und Datenschutz ist die Aktivierung von HTTPS für Web-Apps wichtig. 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. DSGVO- erfordert die Verwendung von HTTPS zum Schutz der Privatsphäre des Benutzers. 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. Ab Version 2.1 lauscht Kestrel auf https://localhost:5001, wenn ein lokales Entwicklungszertifikat vorhanden ist. Ein Entwicklungszertifikat wird erstellt:

  • Als Teil der Erststarterfahrung des .NET Core SDK bei der ersten Verwendung des SDK.
  • Manuelle Verwendung 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

Webanwendungen müssen in der Regel sowohl auf HTTP als auch auf HTTPS lauschen, dann aber den gesamten HTTP-Datenverkehr auf HTTPS umleiten. 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.

Die Verwendung von HTTPS kann mithilfe des HTTP Strict Transport Security (HSTS)-Protokolls weiter 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.
  • Legt das Inhaltsstammverzeichnis auf das Projektstammverzeichnis der getesteten App fest, damit statische Dateien sowie Seiten und Ansichten gefunden werden, wenn die Tests ausgeführt 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 Seiten suchen nach Razor-Ressourcen

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. Aktueller Ordner „Pages“.
  2. /Pages/Shared/
  3. /Views/Shared/

Razor Seiten 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.

Bahnbrechende Änderungen

Verwenden Sie die Artikel in "Breaking changes in .NET ", um nach wichtigen Änderungen zu suchen, die beim Aktualisieren einer App auf eine neuere Version von .NET gelten können.

Weitere Ressourcen

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