Neuerungen in ASP.NET Core 2.1What's new 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.This article highlights the most significant changes in ASP.NET Core 2.1, with links to relevant documentation.

SignalRSignalR

SignalR wurde für ASP.NET Core 2.1 umgeschrieben.SignalR has been rewritten for ASP.NET Core 2.1. ASP.NET Core SignalR umfasst eine Reihe von Verbesserungen:ASP.NET Core SignalR includes a number of improvements:

  • Ein vereinfachtes Modell für horizontale Skalierung.A simplified scale-out model.
  • Einen neuen JavaScript-Client ohne jQuery-Abhängigkeit.A new JavaScript client with no jQuery dependency.
  • Ein neues kompaktes, binäres Protokoll, das auf MessagePack basiert.A new compact binary protocol based on MessagePack.
  • Unterstützung für benutzerdefinierte Protokolle.Support for custom protocols.
  • Ein neues Streaming-Antwortmodell.A new streaming response model.
  • Unterstützung für Clients basierend auf Bare-WebSockets.Support for clients based on bare WebSockets.

Weitere Informationen finden Sie unter ASP.NET Core SignalR.For more information, see ASP.NET Core SignalR.

Razor-KlassenbibliothekenRazor class libraries

ASP.NET Core 2.1 erleichtert die Erstellung und Einbeziehung einer Razor-basierten Benutzeroberfläche in einer Bibliothek sowie die mehrere Projekte übergreifende Freigabe.ASP.NET Core 2.1 makes it easier to build and include Razor-based UI in a library and share it across multiple projects. Mit dem neuen Razor SDK können Razor-Dateien in einem Klassenbibliotheksprojekt erstellt werden, das in ein NuGet-Paket gepackt werden kann.The new Razor SDK enables building Razor files into a class library project that can be packaged into a NuGet package. Ansichten und Seiten in Bibliotheken werden automatisch ermittelt und können von der App überschrieben werden.Views and pages in libraries are automatically discovered and can be overridden by the app. Folgen der Integration der Razor-Kompilierung in den Build:By integrating Razor compilation into the build:

  • Die App wird deutlich schneller gestartet.The app startup time is significantly faster.
  • Schnelle Updates von Razor-Ansichten und -Seiten zur Laufzeit sind weiterhin als Bestandteil eines iterativen Entwicklungsworkflows verfügbar.Fast updates to Razor views and pages at runtime are still available as part of an iterative development workflow.

Weitere Informationen finden Sie unter Erstellen einer wiederverwendbaren Benutzeroberfläche mithilfe des Razor-Klassenbibliotheksprojekts.For more information, see Create reusable UI using the Razor Class Library project.

Bibliothek „Identität“ der Benutzeroberfläche und GerüstIdentity UI library & scaffolding

ASP.NET Core 2.1 stellt ASP.NET Core-Identität als Razor-Klassenbibliothek bereit.ASP.NET Core 2.1 provides ASP.NET Core Identity as a Razor Class Library. Apps, die über die Bibliothek „Identität“ verfügen, können das neue Gerüst „Identität“ anwenden, um die in der Razor-Klassenbibliothek „Identität“ enthaltenen Quellcode selektiv hinzuzufügen.Apps that include Identity can apply the new Identity scaffolder to selectively add the source code contained in the Identity Razor Class Library (RCL). Sie sollten Quellcode generieren, um den Code und das Verhalten ändern zu können.You might want to generate source code so you can modify the code and change the behavior. Sie können das Gerüst beispielsweise anweisen, den bei der Registrierung verwendeten Code zu generieren.For example, you could instruct the scaffolder to generate the code used in registration. Generierter Code hat Vorrang vor dem gleichen Code in der Razor-Klassenbibliothek „Identität“.Generated code takes precedence over the same code in the Identity RCL.

Apps ohne Authentifizierung können das Gerüst „Identität“ anwenden, um das Paket der Razor-Klassenbibliothek „Identität“ hinzuzufügen.Apps that do not include authentication can apply the Identity scaffolder to add the RCL Identity package. Sie können Code der Klassenbibliothek „Identität“ auswählen, der generiert werden soll.You have the option of selecting Identity code to be generated.

Weitere Informationen finden Sie unter Gerüst „Identität“in ASP.NET Core Projekten.For more information, see Scaffold Identity in ASP.NET Core projects.

HTTPSHTTPS

Durch die verstärkte Ausrichtung auf Sicherheit und Datenschutz ist die Aktivierung von HTTPS für Web-Apps von großer Bedeutung.With the increased focus on security and privacy, enabling HTTPS for web apps is important. Die Erzwingung von HTTPS ist im Web zunehmend strenger.HTTPS enforcement is becoming increasingly strict on the web. Websites, auf denen HTTPS nicht verwendet wird, gelten als unsicher.Sites that don’t use HTTPS are considered insecure. Browser (Chromium, Mozilla) beginnen zu erzwingen, dass Web-Features über einen sicheren Kontext verwendet werden müssen.Browsers (Chromium, Mozilla) are starting to enforce that web features must be used from a secure context. Für die DSGVO ist die Verwendung von HTTPS aus Datenschutzgründen erforderlich.GDPR requires the use of HTTPS to protect user privacy. 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).While using HTTPS in production is critical, using HTTPS in development can help prevent issues in deployment (for example, insecure 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.ASP.NET Core 2.1 includes a number of improvements that make it easier to use HTTPS in development and to configure HTTPS in production. Weitere Informationen finden Sie unter Erzwingen von HTTPS.For more information, see Enforce HTTPS.

Standardmäßig aktiviertOn by default

HTTPS ist jetzt standardmäßig aktiviert, um die Entwicklung sicherer Websites zu erleichtern.To facilitate secure website development, HTTPS is now enabled by default. Seit Version 2.1 lauscht Kestrel unter https://localhost:5001, wenn ein lokales Entwicklungszertifikat vorhanden ist.Starting in 2.1, Kestrel listens on https://localhost:5001 when a local development certificate is present. Ein Entwicklungszertifikat wird erstellt:A development certificate is created:

  • Im Rahmen des Eindrucks des .NET Core SDK beim ersten Ausführen, wenn Sie das SDK zum ersten Mal verwenden.As part of the .NET Core SDK first-run experience, when you use the SDK for the first time.
  • Manuell mithilfe des neuen dev-certs-Tools.Manually using the new dev-certs tool.

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

HTTPS-Umleitung und -ErzwingungHTTPS redirection and enforcement

Web-Apps müssen in der Regel HTTP und HTTPS lauschen, leiten dann aber sämtlichen HTTP-Verkehr an HTTPS um.Web apps typically need to listen on both HTTP and HTTPS, but then redirect all HTTP traffic to HTTPS. 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.In 2.1, specialized HTTPS redirection middleware that intelligently redirects based on the presence of configuration or bound server ports has been introduced.

Darüber hinaus kann die Verwendung von HTTPS mit dem HTTP Strict Transport Security Protocol (HSTS) erzwungen werden.Use of HTTPS can be further enforced using HTTP Strict Transport Security Protocol (HSTS). Das HSTS gibt Browsern die Anweisung, immer über HTTPS auf die Website zuzugreifen.HSTS instructs browsers to always access the site via HTTPS. 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.ASP.NET Core 2.1 adds HSTS middleware that supports options for max age, subdomains, and the HSTS preload list.

Konfiguration für die ProduktionConfiguration for production

In der Produktion muss HTTPS explizit konfiguriert sein.In production, HTTPS must be explicitly configured. In Version 2.1 wurde ein Konfigurationsschema für die Konfiguration von HTTPS für Kestrel hinzugefügt.In 2.1, default configuration schema for configuring HTTPS for Kestrel has been added. Apps können für folgende Verwendung konfiguriert werden:Apps can be configured to use:

DSGVOGDPR

ASP.NET Core stellt APIs und Vorlagen für die Erfüllung einiger der Anforderungen der Datenschutz-Grundverordnung (DSGV=) bereit.ASP.NET Core provides APIs and templates to help meet some of the EU General Data Protection Regulation (GDPR) requirements. Weitere Informationen finden Sie unter DSGVO-Unterstützung in ASP.NET Core.For more information, see GDPR support 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.A sample app shows how to use and lets you test most of the GDPR extension points and APIs added to the ASP.NET Core 2.1 templates.

IntegrationstestsIntegration tests

Es wurde ein neues Paket eingeführt, durch das die Testerstellung und -ausführung optimiert wird.A new package is introduced that streamlines test creation and execution. Das Paket Microsoft.AspNetCore.Mvc.Testing behandelt folgende Aufgaben:The Microsoft.AspNetCore.Mvc.Testing package handles the following tasks:

  • Es kopiert die Abhängigkeitsdatei (*.deps) aus der getesteten App in den Ordner bin des Testprojekts.Copies the dependency file (*.deps) from the tested app into the test project's bin folder.
  • Es legt das Inhaltsstammelement auf das Projektstammelement der App fest, damit statische Dateien und Seiten/Ansichten bei der Ausführung des Tests gefunden werden.Sets the content root to the tested app's project root so that static files and pages/views are found when the tests are executed.
  • Es stellt die Klasse WebApplicationFactory zur Optimierung des Bootstrappings der getesteten App mit TestServer bereit.Provides the WebApplicationFactory class to streamline bootstrapping the tested app with TestServer.

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:The following test uses xUnit to check that the Index page loads with a success status code and with the correct Content-Type header:

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.For more information, see the Integration tests topic.

[ApiController], ActionResult<T>[ApiController], ActionResult<T>

In ASP.NET Core 2.1 werden neue Programmierungskonventionen hinzugefügt, die eine Erstellung bereinigter und beschreibender Web-APIs vereinfacht.ASP.NET Core 2.1 adds new programming conventions that make it easier to build clean and descriptive web APIs. 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.ActionResult<T> is a new type added to allow an app to return either a response type or any other action result (similar to IActionResult), while still indicating the response type. Das Attribut [ApiController] wurde auch hinzugefügt, um Web-API-spezifischen Konventionen und Verhaltensweisen zuzustimmen.The [ApiController] attribute has also been added as the way to opt in to Web API-specific conventions and behaviors.

Weitere Informationen finden Sie unter Erstellen von Web-APIs mit ASP.NET Core.For more information, see Build Web APIs with ASP.NET Core.

IHttpClientFactoryIHttpClientFactory

ASP.NET Core 2.1 umfasst einen neuen IHttpClientFactory-Dienst, durch den die Konfiguration und der Verbrauch von HttpClient-Instanzen in Apps vereinfacht wird.ASP.NET Core 2.1 includes a new IHttpClientFactory service that makes it easier to configure and consume instances of HttpClient in apps. HttpClient enthält bereits das Konzept, Handler zu delegieren, die für ausgehende HTTP-Anforderungen miteinander verknüpft werden könnten.HttpClient already has the concept of delegating handlers that could be linked together for outgoing HTTP requests. Die Factory:The factory:

  • Sie macht die Registrierung von HttpClient-Instanzen pro benanntem Client intuitiver.Makes registering of instances of HttpClient per named client more intuitive.
  • Sie implementiert einen Polly-Handler, der zulässt, dass Polly-Richtlinien für „Retry“, „CircuitBreakers“ usw. verwendet werden.Implements a Polly handler that allows Polly policies to be used for Retry, CircuitBreakers, etc.

Weitere Informationen finden Sie unter Initiieren von HTTP-Anforderungen.For more information, see Initiate HTTP Requests.

Kestrel-TransportkonfigurationKestrel transport configuration

Mit dem Release von ASP.NET Core 2.1 basiert der Standardtransport von Kestrel nicht mehr auf Libuv, sondern auf verwalteten Sockets.With the release of ASP.NET Core 2.1, Kestrel's default transport is no longer based on Libuv but instead based on managed sockets. Weitere Informationen finden Sie unter Kestrel web server implementation: Transport configuration (Kestrel: Transportkonfiguration).For more information, see Kestrel web server implementation: Transport configuration.

Generator für generische HostsGeneric host builder

Der Generator für generische Hosts (HostBuilder) wurde eingeführt.The Generic Host Builder (HostBuilder) has been introduced. Dieser Generator kann für Apps verwendet werden, die keine HTTP-Anforderungen verarbeiten (Messaging, Hintergrundaufgaben usw.).This builder can be used for apps that don't process HTTP requests (Messaging, background tasks, etc.).

Weitere Informationen finden Sie unter Generischer .NET-Host.For more information, see .NET Generic Host.

Aktualisierte SPA-VorlagenUpdated SPA templates

Die Vorlagen der Single-Page-Webanwendung für Angular, React und React & Redux werden aktualisiert, damit die Standardprojektstrukturen und Buildsysteme für die einzelnen Frameworks verwendet werden können.The Single Page Application templates for Angular, React, and React with Redux are updated to use the standard project structures and build systems for each framework.

Die Angular-Vorlage basiert auf der Angular-CLI, während die React-Vorlagen auf „create-react-app“ basieren.The Angular template is based on the Angular CLI, and the React templates are based on create-react-app.

Weitere Informationen finden Sie unter:For more information, see:

Razor Pages-Suche nach Razor-ObjektenRazor Pages search for Razor assets

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):In 2.1, Razor Pages search for Razor assets (such as layouts and partials) in the following directories in the listed order:

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

Razor Pages in einem BereichRazor Pages in an area

Razor Pages unterstützt jetzt Bereiche.Razor Pages now support areas. Erstellen Sie für die Anzeige eines Beispiels für Bereiche eine neue Razor Pages-Web-App mit individuellen Benutzerkonten.To see an example of areas, create a new Razor Pages web app with individual user accounts. Eine Razor Pages-Web-App mit individuellen Benutzerkonten enthält /Areas/Identity/Pages.A Razor Pages web app with individual user accounts includes /Areas/Identity/Pages.

MVC-KompatibilitätsversionMVC compatibility version

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.The SetCompatibilityVersion method allows an app to opt-in or opt-out of potentially breaking behavior changes introduced in ASP.NET Core MVC 2.1 or later.

Weitere Informationen finden Sie unter Kompatibilitätsversion für ASP.NET Core MVC.For more information, see Kompatibilitätsversion für ASP.NET Core MVC.

Migrieren von 2.0 zu 2.1Migrate from 2.0 to 2.1

Siehe Migrieren von ASP.NET Core 2.0 zu 2.1.See Migrate from ASP.NET Core 2.0 to 2.1.

Zusätzliche InformationenAdditional information

Die vollständige Liste der Änderungen finden Sie unter ASP.NET Core 2.1 – Anmerkungen zu dieser Version.For the complete list of changes, see the ASP.NET Core 2.1 Release Notes.