Freigeben über


TryParse- und BindAsync-Methoden werden überprüft.

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.

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- oder TryParse-Methode in internal oder private.
  • Fügen Sie eine neue BindAsync- oder TryParse-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() und app.MapPost()