ASP0007: Optionalität von Routenparameter und Argument stimmen nicht überein

Wert
Regel-ID ASP0007
Kategorie Verwendung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend

Ursache

Ein Routenparameter wird in der Delegatdefinition als erforderlich deklariert, ist aber in der Endpunktroute als optional markiert.

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“ keine Übereinstimmung für den folgenden Code auflösen:

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

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

Behandeln von Verstößen

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

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

Wenn der Parameter erforderlich sein soll, legen Sie den Typ als „Non-Nullable“ fest, indem Sie ? aus int? entfernen:

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

Wenn der Parameter optional sein soll, sollte der Nullable-Werttyp?-Operator angewendet werden:

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

Wann sollten Warnungen unterdrückt werden?

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