web-dev-qa-db-fra.com

Paramètres facultatifs de l'API Web

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:

  • ~/api/produits/filtre? apc = AA & xpc = BB
  • ~/api/products/filter? sku = 7199123

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?

21
Josh

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:

  • ~/api/produits/filtre? apc = AA & xpc = BB
  • ~/api/products/filter? sku = 7199123

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.

62
Josh

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

4
Petre T