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
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.
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
Vous devez vous connecter pour publier un commentaire.
J'ai tout compris. J'ai été en utilisant un mauvais exemple, j'ai constaté dans le passé de la façon de carte de la chaîne de requête pour les paramètres de la méthode.
Au cas où quelqu'un d'autre en a besoin, afin d'avoir des paramètres facultatifs dans une chaîne de requête comme:
vous utilisez:
Il semble étrange d'avoir à définir des valeurs par défaut pour les paramètres de la méthode lorsque ces types ont déjà un défaut.
It seems odd to have to define default values for the method parameters when these types already have a default.
. Vérifié les détails sur MSDN sla ici mais il ne parle pas de tous les détails techniques pour lesquelles il a été décidé d'être comme ça.La possibilité de valeur null et l'optionalité sont deux concepts différents, et ils n'ont rien à voir l'un avec l'autre (depuis nullable valeurs peuvent être utilisés en dehors d'une liste de paramètres). Le simple fait de déclarer un paramètre
int?
marque comme nullable, mais il n'est pas facultatif: Vous devez passer soit une valeur non nulle valeur intégrale ounull
. L'ajout de= null
, cependant, est la syntaxe requise pour déclarer la valeur par défaut d'un paramètre facultatif. Par conséquent,int? sku = null
est nullableint
dont la valeur par défaut estnull
(au lieu de quelques autres valeur intégrale).OriginalL'auteur Josh
Sku est un int, ne peut pas être affichée par défaut à la chaîne "sku". Veuillez vérifier En option Paramètres d'URI et des Valeurs par Défaut
int
si elle n'est pasnull
. Si vous vous en tenez àint?
le cadre fournit la validation out-of-the-box et vous avez uniquement besoin de vérifier laModelState
...OriginalL'auteur Petre T