Freigeben über


ASP0007: Die Optionalität von Routenparametern und Argumenten stimmt nicht überein.

Wert
Regel-ID ASP0007
Kategorie Usage
Korrektur ist blockierend oder nicht-blockierend Non-breaking

Ursache

Ein Routenparameter wird in der Stellvertretungsdefinition als erforderlich deklariert, ist aber in der Endpunktroute als optional gekennzeichnet.

Regelbeschreibung

Wenn ein Endpunkt deklariert wird, kann die Optionalität von Parametern sowohl in der Routenvorlage als auch in den Routenhandlerargumenten deklariert werden. Wenn ein Parameter im Handler als optional deklariert wird, muss er auch in der Routenvorlage als optional deklariert werden. Beispielsweise kann GET /todos eine Übereinstimmung für den folgenden Code nicht auflösen:

app.MapGet("/todos/{id}", (int? id) => {});

Der vorherige Code stimmt nicht mit GET /todos überein, da der id Parameter nicht bereitgestellt wurde, obwohl er im Routenhandler als optional behandelt wird.

Wie man Verstöße behebt

Um einen Verstoß gegen diese Regel zu beheben, stellen Sie sicher, dass die Optionalität in der Routenvorlage und dem Delegat konsistent sind. Beispiel für das folgende Codebeispiel:

app.MapGet("/todos/{id}", (int? id) => {});

Wenn der Parameter erforderlich sein soll, machen Sie den Typ nicht-nullbar, indem Sie das ? aus int? entfernen.

app.MapGet("/todos/{id}", (int id) => {});

Wenn der Parameter optional sein soll, sollte der Operator für den ? angewendet werden:

app.MapGet("/todos/{id?}", (int? id) => {});

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung aus dieser Regel. Nicht übereinstimmende Parameter-Optionalität kann zu unerwartetem Verhalten zur Laufzeit beim Routing führen.