Condividi tramite


ASP0007: il parametro di route e la facoltatività dell'argomento non corrispondono

Valore
ID della regola ASP0007
Categoria Uso
La modifica è dirompente o non dirompente Non separabile

Causa

Un parametro di route è dichiarato come obbligatorio nella definizione del delegato, ma è indicato come facoltativo nella route dell'endpoint.

Descrizione della 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 il delegato corrispondano. Ad esempio, per l'esempio di codice seguente:

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

Se il parametro deve essere richiesto, rendi il tipo non annullabile rimuovendo ? da int?:

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

Se il parametro deve essere facoltativo, è necessario applicare l'operatore tipo di valore nullable?:

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

Quando eliminare gli avvisi

Non sopprimere un avviso da questa regola. Il disallineamento di optionalità dei parametri può causare un comportamento imprevisto con il routing in fase di esecuzione.