Partager via


ASP0007 : le paramètre de routage et l’option d’argument sont incompatibles

Valeur
Identificateur de la règle ASP0007
Catégorie Usage
Le correctif est cassant ou non cassant Non-breaking

La cause

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

Description de la règle

Lorsqu’un point de terminaison est déclaré, l’option des paramètres peut être déclarée à la fois dans le modèle d’itinéraire et dans les arguments du gestionnaire d’itinéraires. Lorsqu’un paramètre est déclaré comme facultatif dans le gestionnaire, il doit également être déclaré comme facultatif dans le modèle d’itinéraire. 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 id paramètre n’a pas été fourni, même s’il est traité comme facultatif dans le gestionnaire d’itinéraires.

Comment corriger les violations

Pour corriger une violation de cette règle, assurez-vous que l’optionnalité dans le modèle d’itinéraire 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 requis, rendez le type non nullable en supprimant le ? de int?.

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

Si le paramètre est destiné à être facultatif, l’opérateur ? doit être appliqué :

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

Quand supprimer les avertissements

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