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 validiert 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 darauf hingewiesen werden, dass die Methodensignatur möglicherweise falsch ist.
Eingeführte 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 über Methoden von BindAsync
und TryParse
mit einem ungültigen Format informiert werden. 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 Aktion
Wenn Ihr Typ aus einem anderen Grund als der Parameterbindung eine BindAsync
- oder TryParse
-Methode mit unterschiedlicher Syntax hat, wird beim Start eine Ausnahme ausgelöst. 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 hinzu, die die 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()