Comment échapper à une seule citation pour être utilisée dans une requête OData?
Je suis à l'aide de OData pour interroger ma base de données. La ligne suivante de code fonctionne très bien lorsque “adapterName” contient uniquement du texte.
ds.query('/DataAdapters?$filter=Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, '');
Si “adapterName” contient un guillemet simple, il échoue. J'ai essayé de s'échapper de la seule offre en utilisant le code suivant:
adapterName = adapterName.replace(/\'/g, '\\\'');
Bien que cela correctement échappe à l'utilisateur le texte défini par la fonction échoue encore. Quelqu'un peut-il me dire quel est le format correct pour le texte de la requête?
- CORRIGÉ 🙂 j'ai besoin de convertir les guillemets simples dans un guillemet double.
- À noter: si vous utilisez la sous-chaîne de filtre et la requête est déjà à l'intérieur des devis, vous devrez échapper à 4 ' et non pas 2.
Vous devez vous connecter pour publier un commentaire.
Réellement %27 n'est pas une solution. La manière correcte de s'en sortir est de placer deux guillemets simples dans la chaîne de caractères au lieu d'une seule.
Dans l'exemple
"o''clock"
Je veux élargir en fonction de la réponse un peu afin qu'il s'applique également à l'appel d'un Service oData Fonctionnement de l'Action. La réponse posté réponse est correcte, mais il y a un ordre précis dans lequel les paramètres d'une opération de service doit codé.
Service oData Opérations de recevoir une primitive de type de paramètres, où les chaînes sont enfermés dans un " tels qu'une url valide (pré codage) sera quant à
AddString?valeur= "o"horloge"
Cela va entraîner le serveur pour voir
AddString?valeur='o'
et
'horloge'
va produire des "Bad Request - Erreur dans la syntaxe de la requête."
Pour corriger cela, vous devez double pour échapper à la " et UrlEncode avant de procéder à l'insertion dans l'url.
Ne pas UrlEncode l'url elle-même.
Voici un exemple qui fonctionne.
Lors de l'utilisation de l'esprit substringof il doit être précédé d'avoir 4 au lieu de 1 apostrophe:
a'b ->
$filter=(substringof('a''''b', FirstName))
C'est en fait décrit dans oData docs: http://docs.oasis-open.org/odata/odata/v4.01/cs01/part2-url-conventions/odata-v4.01-cs01-part2-url-conventions.html#sec_URLComponents
Au lieu d'utiliser $filtre=Titre eq 'texte'
Je suis en utilisant le oData startswith() fonction.
$filtre=startswith(Titre, clé)
et puis je passe autant de clés que je peux.
var pos = key.indexOf("'");
if(pos > -1) {
key = key.substring(0, pos);
}