ASP.NET Core 6.0

Eintrag zuletzt aktualisiert am: 24.11.2022

ASP.NET Core 6.0 ist im Rahmen von .NET 6.0 am 8.11.2021 erschienen.

Neuerungen in ASP.NET Core 6.0

Ein ASP.NET Core-fähiger dynamischer Webserver, der bisher einigen Programmcode in den Dateien Program.cs und Startup.cs brauchte, lässt sich nun in drei Zeilen Code starten, siehe Listing 1. Microsoft nennt dies das "Minimal ASP.NET Core Hosting Model".

var app = WebApplication.Create(args);
app.MapGet("/", () => $"Minimaler Webserver mit {System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription} auf {System.Runtime.InteropServices.RuntimeInformation.OSDescription}");
await app.RunAsync();
Listing 1: Minimaler Webserver in ASP.NET Core 6.0

Als neuen Standardwebserver beim Debugging verwendet Microsoft den in ASP.NET Core mitgelieferten Kestrel. Ein Umschalten auf den in Visual Studio mitgelieferten Internet Information Server Express ist weiterhin möglich. Den kommenden HTTP/3-Standard auf Basis von QUIC liefert Microsoft als "Preview"-Feature mit [https://devblogs.microsoft.com/dotnet/http-3-support-in-dotnet-6/]. HTTP/3 kann dabei auch schon für gRPC-Kommunikation eingesetzt werden, was aber für andere Plattformen noch in der Diskussion ist [https://github.com/grpc/proposal/pull/256].

Die meisten Neuerungen gibt es für die ASP.NET Core-Variante "Blazor", mit der man nun nicht nur Single-Page-Web-Apps, sondern auch hybride Apps für Windows schreiben kann. Dabei werden Blazor-Anwendung mit HTML-Oberfläche in einem Webview-Steuerelement in einer Desktop-Anwendung auf Basis von Windows Forms oder Windows Presentation Foundation im gleichen Prozess und Thread gehostet. Die Webanwendung hat dabei vollen Zugriff auf alle System-APIs. MAUI zeigt in seinen Vorschauversionen bereits seit Mai 2021, das dies auch auf Android, iOS und macOS möglich ist.

Für Blazor WebAssembly, bei dem bisher immer .NET Intermediate Language im Browser (langsam) interpretiert wurde, hat Microsoft nun einen optionalen Ahead-of-Time-Compiler (AOT) zu WASM-Bytecode eingebaut. Das beschleunigt zwar den Lauf einer Anwendung erheblich, aber es sind beim Anwendungsstart für die .NET-Laufzeitumgebung und den eigenen Code deutlich mehr Megabytes in den Browser zu hieven, was die ansonsten in Blazor 6.0 erzielten Optimierungen im Bereich der Downloadgröße zu Nichte macht. Mehrere Megabytes in den Browser zu laden, kann im Intranet akzeptabel sein, ist aber im öffentlichen Internet ein KO-Kriterium.

Die Integration zwischen C# und JavaScript hat Microsoft verbessert: Nun ist schnelleres Streaming von Daten möglich und eine Blazor-Anwendung lässt sich innerhalb einer JavaScript-Anwendung rendern. Der Konzern arbeitet auch daran, Blazor-Komponenten als Standard Web Components bereitzustellen. Das zur Erstellung von HTML Custom Elements bereitgestellte NuGet-Paket Microsoft.AspNetCore.Components.CustomElements bleibt aber vorerst im experimentellen Alpha-Stadium. Darüber hinaus vermeidet Blazor 6.0 aber nun an mehr Stellen den Einsatz von JavaScript, z.B. bei der Manipulation des Head-Elements einer Seite und bei DropDowns mit Mehrfachauswahl.

Für die Komponentenprogrammierung in Blazor bietet Microsoft nun eine Parameterübernahme aus dem Querystring, Typparameter mit Bedingungen, Pflichtparameter (deren Nicht-Belegung allerdings nur zur Entwicklungszeit zu Warnungen führt) und die aus React bekannten Error Boundaries zur Fehlerbehandlung sowie ein leichteres dynamisches Render mit der neuen <DynamicComponent>.