ASP0007: il parametro di route e la facoltatività dell'argomento non corrispondono
Valore | |
---|---|
ID regola | ASP0007 |
Categoria | Utilizzo |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Causa
Un parametro di route viene dichiarato come obbligatorio nella definizione del delegato, ma è contrassegnato come facoltativo nella route dell'endpoint.
Descrizione regola
Quando un endpoint viene dichiarato, la facoltatività dei parametri può essere dichiarata sia nel modello di route che negli argomenti del gestore di route. Quando un parametro viene dichiarato come facoltativo nel gestore, deve anche essere dichiarato come facoltativo nel modello di route. Ad esempio, GET /todos
non riesce a risolvere una corrispondenza per il codice seguente:
app.MapGet("/todos/{id}", (int? id) => {});
Il codice precedente non corrisponde a GET /todos
perché il id
parametro non è stato specificato, anche se viene considerato facoltativo nel gestore di route.
Come correggere le violazioni
Per correggere una violazione di questa regola, assicurarsi che la facoltatività nel modello di route e la corrispondenza del delegato. Ad esempio, per l'esempio di codice seguente:
app.MapGet("/todos/{id}", (int? id) => {});
Se il parametro deve essere richiesto, rendere il tipo non nullable rimuovendo da ?
int?
:
app.MapGet("/todos/{id}", (int id) => {});
Se il parametro deve essere facoltativo, è necessario applicare l'operatore ?
di tipo valore nullable:
app.MapGet("/todos/{id?}", (int? id) => {});
Quando eliminare gli avvisi
Non eliminare un avviso da questa regola. La facoltatività del parametro non corrispondente può comportare un comportamento imprevisto con il routing in fase di esecuzione.