Comment envoyer NULL dans la chaîne de requête HTTP?
Je suis le développement d'une API qui peut accepter les trois principaux types de données en tant que valeurs de paramètres de chaîne de requête: boolean
, string
& numeric
(integer
ou float
). Par défaut, tout est récupéré une chaîne de caractères (je ne pense pas qu'il y a un moyen de contourner cela), mais les paramètres sont configurés avec un type afin que je les convertir en un type approprié.
J'ai maintenant besoin de commencer à accepter la valeur NULL pour les trois types de données, mais je ne suis pas sûr de ce qui est la meilleure façon de le faire.
Certaines personnes semblent n'accepter aucune valeur NULLE (?param
, sans =
), mais ce n'est pas assez de travail pour moi:
- Je suis déjà accepter qu'en tant que
true
pour les booléens, bien que cela puisse être changé. - Il est reçu comme une chaîne vide, ce qui est une valeur valide pour le
string
type de données.
Donc, ici, sont les deux seules options que je peux voir, aucun de qui travaillent pour moi:
- Utiliser une constante, comme
"NULL"
ou"~"
. Qui fonctionne pour les booléens & des chiffres, mais pas pour les chaînes, qui peut être souhaité de la chaîne de valeur. - Utiliser une valeur vide. Une fois de plus, qui peuvent travailler pour les booléens & des chiffres, mais pas pour les chaînes, qui peut être souhaité de la chaîne de valeur.
Semble à l'aide d'une constante peut être mon seul choix, et pour éviter les problèmes que les constantes peuvent être interdits à partir de chaînes. Mais est-ce vraiment la seule option viable? Je souhaite qu'il y ait une meilleure façon. 🙁
Modifier: j'ai juste eu une autre idée qui pourrait fonctionner, mais je ne suis pas sûr de savoir comment il sera perçu. Je pense qu'il a certainement des sauts de normes, et beaucoup de gens seraient probablement pas comme elle, mais de corriger mon problème mieux que toute autre solution jusqu'à présent. En gros, l'idée serait d'utiliser JSON, qui prend en charge les types de données. Je ne suis pas avoir ce problème avec les requêtes POST parce qu'ils sont à l'aide de JSON.
Donc, l'idée serait de prendre JSON dans la chaîne de requête, permettant aux une alternative de chaîne de requête qui remplacerait le standard HTTP. Quelque chose comme: ?_json={"foo":"bar","param":null}
au lieu de ?foo=bar¶m=~
. Ou peut-être même prendre plus de la chaîne de requête entièrement: ?{"foo":"bar","param":null}
.
Kylar la suggestion semble être la méthode acceptée. Voir ici pour référence: w3schools.com/tags/ref_urlencode.asp
Wow, merci, je n'ai jamais pensé que & n'était pas au courant que c'était la méthode acceptée. L'esprit de poster une réponse? Je vais l'accepter comme la bonne solution.
OriginalL'auteur Marco Roy | 2015-07-06
Vous devez vous connecter pour publier un commentaire.
Envoyer un URLEncoded NUL valeur (%00) pour quelque chose que vous êtes spécialement paramètre à null. Il doit être correctement URL Décodé.
�
. Mais il est toujours possible de l'attraper par le comparant avec"\x00"
. J'ai donc dû ajouter une boucle qui vérifie chaque paramètre de requête et remplace"\x00"
avecnull
.En fait, voici une meilleure mise en œuvre que d'un manuel de boucle:
array_walk_recursive($queryParameters, function (&$value, $key) { if ($value === "\x00") { $value = null; } });
� la valeur par défaut est "Inconnu/impossibles à mapper' caractère unicode. Vous devez toujours regarder les octets. 😉
Oh oui, ne vous inquiétez pas, je savais à ce sujet. 😛 Juste voulu donner de l'information dans le cas où il pourrait être utile pour quelqu'un d'autre.
OriginalL'auteur Kylar
ou tout simplement ne pas envoyer la valeur .. laisser une requête param valeur vide dans votre requête get à l'url.. comme -
URL API/?foo=&some_other_param=valeur
dans l'API foo sera reçu comme nulle
foo
sera reçu comme une chaîne vide et provoquer des problèmes avec d'autres types de données, comme je l'ai indiqué dans la question.non ..en fonction de vos configurations et comment vous gérer dans l'API .. essayer avec ASP.Net de base le comportement par défaut ou WebAPI ..
Je ne l'utilise pas .Net, et la réponse ne devrait pas être spécifique .Net. Je cherchais une langue & cadre-agnostique réponse; une sorte de Standard du Web.
Que faire si nous n'avons pas d'envoyer la clé à tous.. ça va être NUL alors ?
salut @RahulJangra , toutes mes excuses pour la réponse tardive. Si vous vous attendez à une chaîne de caractères dans votre méthode get paramètre querystring et vous n'avez pas le passer à tous, alors vous obtiendrez la valeur null dans votre API.
OriginalL'auteur enthusiast
Avec IIS et C#, j'ai envoyer de cette façon:
OriginalL'auteur Ariel