TryParse- und BindAsync-Methoden werden überprüft.
ASP.NET Core validiert jetzt TryParse
- und BindAsync
-Methoden auf Parametertypen für Map*
-Methoden. Wenn keine gültige Methode gefunden wird, sucht ASP.NET Core nach ungültigen Methoden und löst beim Start eine Ausnahme aus, wenn eine gefunden wird. Die Ausnahme hilft, unerwartetes Verhalten zu vermeiden, indem Sie benachrichtigt werden, dass Ihre Methodensignatur möglicherweise falsch ist.
Eingeführt in Version
ASP.NET Core 6.0 RC 2
Vorheriges Verhalten
In früheren Versionen von ASP.NET Core 6 wurde keine Ausnahme ausgelöst, wenn die Methode TryParse
oder BindAsync
eine ungültige Signatur hatte und das Framework versuchte, JSON-Code aus dem Text zu binden.
// Todo.TryParse is not in a valid format.
// Will try to bind from body as JSON instead.
app.MapPost("/endpoint", (Todo todo) => todo.Item);
public class Todo
{
public string Item { get; set; }
public static bool TryParse(string value) => true;
}
Neues Verhalten
Wenn ASP.NET Core eine öffentliche TryParse
oder BindAsync
Methode findet, die nicht der erwarteten Syntax entspricht, wird beim Start eine Ausnahme ausgelöst. Im vorherigen Beispiel wird ein Fehler ähnlich dem folgenden erzeugt:
TryParse method found on Todo with incorrect format. Must be a static method with format
bool TryParse(string, IFormatProvider, out Todo)
bool TryParse(string, out Todo)
but found
Boolean TryParse(System.String)
Typ des Breaking Changes
Diese Änderung kann sich auf die binäre Kompatibilität und Quellkompatibilität auswirken.
Grund für die Änderung
Diese Änderung wurde vorgenommen, damit die Entwickler auf BindAsync
- und TryParse
-Methoden aufmerksam gemacht werden, die ein ungültiges Format haben. Zuvor wurde für das Framework ein Fallback auf die Annahme verwendet, dass der Parameter JSON aus dem Text stammt. Diese Annahme kann zu unerwartetem Verhalten führen.
Empfohlene Maßnahme
Wenn Ihr Typ eine BindAsync
- oder TryParse
-Methode mit einer anderen Syntax aus einem anderen Grund als der Parameterbindung hat, werden Sie jetzt beim Start eine Ausnahme feststellen. Um dieses Verhalten zu vermeiden, stehen mehrere Strategien zur Verfügung:
- Ändern Sie Ihre
BindAsync
- oderTryParse
-Methode ininternal
oderprivate
. - Fügen Sie eine neue
BindAsync
- oderTryParse
-Methode mit der Syntax hinzu, nach der das Framework sucht. Ungültige Methoden werden ignoriert, wenn eine gültige gefunden wird. - Markieren Sie Ihren Parameter als
[FromBody]
.
Betroffene APIs
RequestDelegateFactory.Create()
- Alle
IEndpointRouteBuilder.Map*()
-Methoden, zum Beispielapp.MapGet()
undapp.MapPost()