J'ai un contrôleur avec la signature suivante:
[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")]
public IHttpActionResult Get(string apc, string xpc, int? sku)
{ ... }
J'appelle cette méthode avec les URI suivants:
Le premier URI fonctionne sans problème. Le second a un effet secondaire étrange. Même si les valeurs par défaut pour apc et xpc devraient être nulles lorsqu'elles ne sont pas fournies, les paramètres sont en réalité leurs noms. Je peux surmonter cela en ajoutant la logique supplémentaire:
apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;
Cela ressemble à un hack et serait problématique si la valeur transmise était égale au nom du paramètre.
Existe-t-il un moyen de définir l'itinéraire sans cet effet secondaire?
Je l'ai compris. J'utilisais un mauvais exemple que j'ai trouvé par le passé pour mapper une chaîne de requête aux paramètres de la méthode.
Si quelqu'un d'autre en a besoin, afin de disposer de paramètres optionnels dans une chaîne de requête, tels que:
vous utiliseriez:
[Route("products/filter/{apc?}/{xpc?}/{sku?}")]
public IHttpActionResult Get(string apc = null, string xpc = null, int? sku = null)
{ ... }
Il semble étrange de devoir définir des valeurs par défaut pour les paramètres de méthode lorsque ces types ont déjà une valeur par défaut.
Sku est un int, la chaîne "sku" ne peut pas être configurée par défaut. Veuillez vérifier paramètres d'URI facultatifs et valeurs par défaut