Das sind die Überarbeitungen von .NET Core, ASP.NET Core und Entity Framework Core in Version 2.1

Mehr Kapselung in ASP.NET Core 2.1

Beim Anlegen eines neuen Webprojekts mit ASP.NET 2.1 in Visual Studio 2017 (Version 15.7) oder dem Kommandozeilenwerkzeug "dotnet new" fällt sofort auf, dass viel weniger Webseiten als bisher angelegt werden: Alle Seiten für die Benutzeranmeldung und Benutzerverwaltung fehlen. Dennoch ist beim Start der Anwendung diese Funktionalität vorhanden. Microsoft hat diese Funktionen in eine DLL (Microsoft.AspNetCore.Identity.UI.dll) gekapselt. Im generierten Programmcode findet man lediglich unter /Area/Identity/Pages/_ViewStart.cshtml eine Konfiguration, welche auf der Layoutseite als Master Page zum Einsatz kommen soll. Entwickler, denen die Anpassungsfähigkeiten über die Layoutseite nicht reichen, können sich dann aber die einzelnen Webseiten herausgenerieren lassen (per Funktion in Visual Studio: Add Scaffold | Identity) und sie manuell wie bisher bearbeiten. Zu beachten ist aber, dass die generierten Seiten dann immer das Model der sogenannten "Razor Pages" nutzen, auch wenn man ein Projekt mit dem Model-View-Controller-Framework angelegt hatte. Razor Pages wurden in ASP.NET Core 2.0 eingeführt und sind das neue von Microsoft favorisierte Entwicklungsmodell für Server Side Rendering.

Mit "Areas" können Entwickler innerhalb eines Projekts die Seiten organisatorisch trennen. Jede Area kann ihr eigenes "/Shared"-Verzeichnis besitzen. Microsoft vereinfacht die Datenbindung in Razor Pages, indem die Annotation [BindPropertyAttribute] zentral auf eine Page-Model-Klasse anwendbar ist. Mit der Schnittstelle IPageFilter können Entwickler eigene Logik nun vor und nach dem Razor Page Handler ausführen. Die neuen Projektvorlagen für ASP.NET Core unterstützen zudem im Standard das Einholen des Benutzereinverständnisses für Cookies gemäß DSGVO. Cookies, die nicht als "Essential" markiert sind, werden automatisch unterdrückt, wenn Benutzer ihr Einverständnis zu Cookies verweigern.

Für ASP.NET-Core-basierte Web-APIs bietet Microsoft mit der Controller-Annotation [ApiController] mehr Automatismen bezüglich Parameterbindung und Validierung. So sucht ASP.NET Core komplexe Typen wieder im Standard im Inhalt der HTTP-Nachricht statt im Query String. Wenn Validierungen fehlschlagen und dadurch der Model State ungültig ist, liefert die Web-API nun automatisch den Fehler 400 ("Bad Request") zurück. Die neue Klasse ActionResult<T> erlaubt das individuelle Setzen von HTTP-Statuscodes und gleichzeitig die Rückgabe eines typisierten Objekts für den Inhalt der Antwort. Damit wird die Generierung von Swagger-OpenAPI-Dokumentationen vereinfacht. Beim untypisierten ActionResult mussten Entwickler bisher Swagger per zusätzlicher Annotation über den Ergebnistyp informieren. Zudem unterstützt Microsoft nun die Übermittlung von Problemdetails nach RFC 7808.

Zwei der im Februar 2018 angekündigten Funktionen werden die Entwickler jedoch nicht in ASP.NET Core 2.1 finden. Zum einen fehlt die schnellere In-Process-Integration in den Microsoft-Webserver Internet Information Services (IIS), das heißt, alle Verarbeitungsschritte von ASP.NET Core 2.1 laufen auch im IIS weiterhin in einem eigenen Prozess. Zum zweiten verbleibt die Portierung der WebHooks-Bibliothek von klassischen ASP.NET auf ASP.NET Core im Preview-Status. In beiden Fällen begründet Microsoft die Streichung damit, dass man den beiden Funktionen nicht genügend Aufmerksamkeit geschenkt habe.

ASP.NET Core SignalR, Microsofts Framework für bi-direktionale Kommunikation zwischen Webserver und Browser, ist nun in einer Version 1.0 als Zusatz zu ASP.NET Core 2.1 verfügbar.

Verfügbarkeit

.NET Core 2.1 inklusive ASP.NET Core 2.1 und Entity Framework Core 2.1 gibt es als Download auf der Microsoft-Website als Laufzeit- oder SDK-Version. Entity Framework Core 2.1 kann man auch einzeln über NuGet beziehen durch Einbindung des entsprechenden Datenbanktreibers (z.B. für Microsoft SQL Server oder SQLite). ASP.NET Core gibt es bei NuGet neben dem bisherigen allumfassenden Meta-Paket Microsoft.AspNetCore.All und auch in reduzierter Form mit dem neuen Meta-Paket Microsoft.AspNetCore.App. In diesem App-Paket fehlen einige Pakete wie die SQLite-Unterstützung für Entity Framework Core, die man in einer Webanwendung eher selten braucht.