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.