ASP0007 : L'optionnalité du paramètre de routage et de l'argument ne correspond pas

Value
Identificateur de la règle ASP0007
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture

Cause

Un paramètre de route est déclaré comme requis dans la définition du délégué mais est marqué comme facultatif dans la route du point de terminaison.

Description de la règle

Lorsqu'un point de terminaison est déclaré, le caractère facultatif des paramètres peut être déclaré à la fois dans le modèle de route et dans les arguments du gestionnaire de route. Lorsqu'un paramètre est déclaré facultatif dans le gestionnaire, il doit également être déclaré facultatif dans le modèle de route. Par exemple, GET /todos ne parvient pas à résoudre une correspondance pour le code suivant :

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

Le code précédent ne correspond pas à GET /todos car le paramètre id n'a pas été fourni, même s'il est traité comme facultatif dans le gestionnaire d'itinéraire.

Comment corriger les violations

Pour corriger une violation de cette règle, assurez-vous que l'optionnalité dans le modèle de route et le délégué correspondent. Par exemple, pour l'exemple de code suivant :

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

Si le paramètre est destiné à être obligatoire, rendez le type non nullable en supprimant ? de int? :

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

Si le paramètre est destiné à être facultatif, l'opérateur de type valeur nullable ? doit être appliqué :

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

Quand supprimer les avertissements

Ne supprimez pas un avertissement de cette règle. L'optionnalité des paramètres incompatibles peut entraîner un comportement inattendu avec le routage au moment de l'exécution.