L'API Web paramètres optionnels

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:

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

Le premier URI fonctionne sans problème. La seconde a un côté étrange effet. Même si les valeurs par défaut pour les apc et xpc devrait être nulle lorsqu'il n'est pas fourni, les paramètres sont leurs noms. Je peux résoudre ce problème en ajoutant la logique:

apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;

Cela semble être un hack, et serait problématique si la valeur passée est toujours égal du nom du paramètre.

Est-il un moyen de définir l'Itinéraire sans que cet effet secondaire?

Vous avez fourni des valeurs par défaut dans votre template de route. Pourquoi voudriez-vous attendre à être null?
Je pensais {sku=sku} cartographié le paramètre dans la chaîne de requête pour le paramètre de méthode.
Vous devriez consulter la documentation pour l'attribut de routage. Il montre comment faire de paramètres optionnels.

OriginalL'auteur Josh | 2016-07-07