Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
ASP.NET Core überprüft TryParse und BindAsync methoden für 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 darauf hingewiesen werden, dass die 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, wenn eine TryParse oder BindAsync methode eine ungültige Signatur aufweist, wurde keine Ausnahme ausgelöst, und das Framework hat versucht, JSON aus dem Textkörper 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 mit der erwarteten Syntax übereinstimmt, wird beim Start eine Ausnahme ausgelöst. Im vorherigen Beispiel wird ein Fehler erzeugt, der ähnlich ist:
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)
Art der einschneidenden Änderung
Diese Änderung kann sich auf binäre Kompatibilität und Quellkompatibilität auswirken.
Grund für Änderung
Diese Änderung wurde vorgenommen, damit Entwickler auf die Methoden BindAsync und TryParse aufmerksam werden, die ein ungültiges Format haben. Zuvor würde das Framework auf die Annahme zurückgreifen, dass der Parameter JSON aus dem Textkörper ist. Diese Annahme kann zu unerwartetem Verhalten führen.
Empfohlene Aktion
Wenn Ihr Typ eine BindAsync- oder TryParse-Methode mit einer anderen Syntax aus einem anderen Grund als der Parameterbindung aufweist, tritt beim Start eine Ausnahme auf. Um dieses Verhalten zu vermeiden, stehen mehrere Strategien zur Verfügung:
- Ändern Sie Ihre
BindAsync- oderTryParse-Methode ininternaloderprivate. - Fügen Sie eine neue
BindAsyncoderTryParseMethode hinzu, die das vom Framework gesuchte Syntax aufweist — ungültige Methoden werden ignoriert, wenn eine gültige gefunden wird. - Markieren Sie den Parameter als
[FromBody].
Betroffene APIs
RequestDelegateFactory.Create()- Alle
IEndpointRouteBuilder.Map*()Methoden, z. B.app.MapGet()undapp.MapPost()