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.