ASP.NET Core 7.0

Eintrag zuletzt aktualisiert am: 24.11.2022

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.