Überblick ASP.NET 7
Einführung in ASP.NET 7
ASP.NET 7 ist die neueste Version des ASP.NET-Webentwicklungs-Frameworks von Microsoft. Erschienen am 08. November 2022 stellt es eine Weiterentwicklung
der Version ASP.NET 6 dar. Diese neue Version bringt viele Verbesserungen für den Entwicklungsprozess, wie z.B. eine mehr Performance und Unterstützung
für moderne Webstandards. Jedoch sollte man beachten, dass diese Version standard-term support (STS)
hat. Das bedeutet, im Gegensatz
zu ASP.NET 6, wird diese Version nur 18 Monate nach dem Erscheinen supported.
Was ist neu in ASP.NET 7 ?
In der Version 7 von ASP.NET ging es vor allem um das Thema Performance. Alle neuen Features, aber auch bereits vorhandene Features, wurden mit
dem Gedanken erstellt, die Performance maßgeblich zu verbessern. So wurden neben einer deutlich verbesserten Programmcode Erzeugung auf der Plattform
Arm64 auch das On-stack replacement (OSR)
hinzugefügt, welches dem Entwickler erlaubt, den Programmcode innerhalb einer gerade ausgeführten
Funktion live zu tauschen. Aber auch die Erstellung von nativem Programmcode hat einen großen Schritt nach vorn gemacht mit Native AOT
.
Ferner wurde auch die bereits relativ gute Performance von HTTP/2 noch weiter verbessert sowie mit UseRateLimiter
eine integrierte
Middleware eingeführt, die den Datenverkehr begrenzen kann. Beide Schritte tragen maßgeblich zu performanteren Anwendungen bei.
gRPC JSON transcoding
Aber nicht nur die Performance wurde verbessert. Es gab auch einige andere erwähnenswerte Erweiterungen und Neuerunen innerhalb des ASP.NET 7 Frameworks.
gRPC unterstützt jetzt auch Transkodierung in das JSON
Format. Dies ermöglicht dem Client wahlweise mit gRPC oder REST auf den jeweiligen
Dienst zu zu greifen. Eine Verdopplung der Implementierung auf der Server Seite ist nicht länger erforderlich.
to Program.Main or not to Program.Main
Mit ASP.NET 6 wurde die Möglichkeit eingeführt, dass sogenannte top-level-statements
ohne eine Program.Main
Funktion
direkt in der Datei geschrieben wurden. Dieser neue Standard wurde gemischt aufgenommen. Zwar ist dieses Programmiermodell immer noch Standard,
aber mit Hilfe des Parameters --use-program-main
kann bei der Erstellung des Projektes entschieden werden, ob mit oder ohne Main
Methode entwickelt werden soll.
OpenAPI Verbesserung für Routing basierte API’s
Bisher wurde die Beschreibung für das zu erstellende OpenAPI Dokument ausschließlich über Attribute hinzugefügt. Dies machte es schwierig und kompliziert eine integrierte Dokumentation für eine solchen Dienst zu erstellen.
/// mit ASP.NET 6
app.MapGet("/hello-aspnet-6",
[SwaggerOperation(Tags = new[] { "MyTag" })]
() => "Hello world"
);
/// ab ASP.NET 7
app.MapGet("/hello-aspnet-7", () => "Welcome to the future").WithOpenApi();
Dazu kommen der neue generische Type Results<TResult1, TResult2, TResultN>
sowie die Funktion TypedResults
. Diese
beiden Erweiterungen ermöglichen zusammen, dass alle möglichen Rückgabetypen mit Hilfe der Fluent API an OpenAPI übergeben werden können, ohne
dass zusätzliche Attribute erforderlich sind.
app.MapGet("/todos/{id}", async Results<Ok<Todo>, NotFound> (int id, TodoDb db)
{
return await db.Todos.FindAsync(id) is Todo todo
? TypedResults.Ok(todo)
: TypedResults.NotFound();
});
System.Text.Json
Die Implementierung des JSON-Serializer wurde grundlegend überarbeit und auf Performance optimiert. War doch die Empfehlung bisher eher Newtonsoft.Json
zu verwenden so lässt sich spätestens ab der Version ASP.NET 7 sagen, dass die integrierte Serialisierung dieser Bibliothek in keinem Punkt mehr
nachsteht. Solange keine erweiterten Funktionen wie z.B. JsonPath
, MissingMemberHandling
oder DateTimeZoneHandling
benötigt werden. Lautet die Empfehlung jetzt lieber direkt System.Text.Json
zu verwenden.
Operator constraints
Bei der Entwicklung von modernen Anwendungen wird immer häufiger die Möglichkeit der Implementierung generischer mathematischer Algorithmen benötigt.
Bisher war es in C# nicht möglich Operator constraints
zu verwenden. Was zu einer komplizierteren oder teilweise sogar nicht möglichen
Implementierung führte. Dies ist ab der Version 11 von C# (endlich) möglich:
static T Add<T>(T left, T right)
where T : INumber<T>
{
return left + right;
}
Weitere Neuerungen
Darüber hinaus wurde die Implementierung der Regex-Bibliothek grundlegend überarbeitet und um neue FFunktionen erweitert. Es sind Route groups
für route-basierte APIs dazugekommen sowie die Möglichkeit die Anwendung direkt als Container zu veröffentlichen.