Share via


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.