ASP.NET Core 7.0 ist zusammen mit
.NET 7.0 im am 8.11.2022 erschienen.
Neuerungen in ASP.NET Core 7.0
Verbesserungen für speziell für Minimal-APIs in ASP.NET Core 7.0
- Bindung einzelner Parameter an ein komplexes Objekt, welches mit [AsParameters] annotiert ist
- Gruppierung von Routen mit gemeinsamen Basis-URL und gemeinsamer Konfiguration
- Parameterbindung an mehrfach vorkommenden Werten in Header und Querystrings
- Endpoint-Filter, die Code vor oder nach einer Web API-Operation ausführen (AddFilter())
- Verbesserte Konfiguration für die Open-API-Specification (siehe [https://github.com/dotnet/aspnetcore/issues/37098])
- Datei-Upload mit den Schnittstellen IFormFile und IFormFileCollection
- Entgegenname von Daten über die Klassen Stream und PipeReader
- Vereinfachungen bei der Konfiguration von Authentifizierung und Autorisierung (siehe [https://github.com/dotnet/aspnetcore/issues/34545])
Details zu ASP.NET Core 7.0
Wesentliche Neuerungen bei den
Web-APIs in ASP.NET Core 7.0 ist die Brücke zwischen
gRPC und
REST, die es erlaubt, einen
gRPC-Dienst auch mit beliebigen HTTP-Verben und mit
JSON-Nutzlast aufzurufen. Die Brücke kümmert sich dabei auch um das Transcoding zwischen
JSON und dem Protocol-Buffers-Format. Außerdem wird die OpenAPI-Specification für einen
gRPC-Dienst angeboten. Entwickler, die
Webservices mit dem performanten
gRPC aus Kompatibilitätsgründen per
REST anbieten müssen, vermeiden nun Doppelarbeit. Die Open API-Unterstützung dazu verbleibt aber auch nach dem
.NET 7.0-Release im experimentellen Stadium. Entwickler können bei
gRPC zudem jetzt einen Health Check Service mit dem
NuGet-Paket Grpc.AspNetCore.HealthChecks realisieren sowie im Client mit AddCallCredentials() ein Bearer Token übergeben.
Darüber hinaus bietet ASP.NET Core 7.0 Vereinfachungen bei der Parameterbindung. Eine Klasse, die bei der Parameterbindung vorkommt, darf eine
Methode static bool TryParse(string s, out klasse obj) realisieren, die eine übergebene Zeichenkette in eine Instanz der Klasse verwandelt. Parameter von
Web-API-Operationsmethoden füllt ASP.NET Core nun per
Dependency Injection, wenn es ein entsprechendes
Objekt im
Dependency Injection-
Container gibt. Das ist ein Breaking Change gegenüber dem früheren Verhalten [
https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/7.0/api-controller-action-parameters-di]. Mit sogenannten Typed Results (z.B. return TypedResults.BadRequest<string>(exception.Message)) sind
Web-API-Ergebnisse einfacher testbar.
Einige der für Minimal-APIs implementierten Funktionen funktionieren nicht oder anders für klassische Controller-basierte
Web-APIs . So erzeugt der Einsatz von [AsParameters] einen Laufzeitfehler "Unsupported Media Type". Allerdings kann man in Controller-basierten Operationen schon lange, Klassen als Parameter zum
Model Binding via [FromQuery] verwenden. Dies ist nur ein Beispiel von den vielen Unterschieden zwischen den Minimal-APIs und den klassischen Controller-basierten WebAPIs). In ASP.NET Core 7.0 driften beide API-Stile weiter auseinander.
Beim bidirektionalen Kommunikationsprotokoll SignalR können nun Clients auch Rückgabewerte senden, bei eingehenden Aufrufen vom Server.
In ASP.NET Core 7.0 hat Microsoft zudem drei neue
Middleware-
Komponenten für ASP.NET Core ergänzt. Die neue Output
Caching Middleware speichert das Ergebnis einer HTTP-Anfrage im RAM. Die ebenfalls neue Request Decompression
Middleware verarbeitet HTTP-Anfragen mit Content-Encoding innerhalb von ASP.NET Core, sodass der
Webserver sich nicht mehr darum kümmern muss. Mit der neuen Rate Limiting
Middleware beschränken Entwickler die Anzahl der eingehenden HTTP¬-Anfragen innerhalb von ASP.NET Core.
Der in ASP.NET Core mitgelieferte plattformneutrale
Webserver Kestrel bietet in
.NET 7.0 WebSockets auch über HTTP/2 statt nur HTTP/1.1. Auch in
ASP.NET Core SignalR gibt es nun WebSockets über HTTP/2, wobei die Verhandlung der zu verwendenden HTTP-Version automatisch stattfindet. Uploads mit HTTP/2 wurden beschleunigt. Die in
.NET 6.0 eingeführte HTTP/3-Implementierung ist nun produktionsreif.
.NET 7.0 bietet nun eine experimentelle Implementierung des IETF-Enwurfs "
WebTransport" [
https://ietf-wg-webtrans.github.io/draft-ietf-webtrans-http3/draft-ietf-webtrans-http3.html] für mehrere bidirektionale
Streams über eine HTTP/3-Verbindung in
Kestrel.