2016-03-15 2 views
0

Je construis une application iOS avec Swift2.0, XCode 7.2 Je suis en train de faire un appel d'api à:comment faire un api appel au serveur qui nécessite des caractères spéciaux en utilisant session NSURL?

htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={"locality":{"$eq":"miami"}}

let endPoint:String = "htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={%22locality%22:{%22$eq%22:%22miami%22}}" 

Lorsque je tente de créer une URL en utilisant cette chaîne (endPoint):

let url = NSURL(string: endPoint), un nil est renvoyé.

J'ai donc essayé codant pour la chaîne avant d'essayer de créer URL:

let encodedString = endPoint.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 

Maintenant, le encodedString:

"htttp://xyz.com/t/restaurants-us?KEY=someKey&filters=%7B%2522locality%2522:%7B%2522$eq%2522:%2522miami%2522%7D%7D" 

Mais maintenant, quand je crée une session NSURL et envoyer la demande, je reçois un réponse inattendue du serveur:

Donc, si je ne le fais pas encoder la chaîne, je ne serai pas en mesure de créer NSURL. Mais si je code et envoie la demande, le serveur n'est pas capable de gérer la demande. Quelqu'un peut-il s'il vous plaît suggérer une solution de contournement.

Répondre

0

Lorsque vous déclarez endpoint, vous avez déjà codé en pourcentage certains caractères (les guillemets). Lorsque vous demandez à iOS de le coder en pourcentage, il code pour cent les codes en pourcentage. Décodant les encodedString résultats dans:

htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={%22locality%22:{%22$eq%22:%22miami%22}} 

Au lieu de cela, vous devriez commencer avec des citations réelles endpoint:

let endPoint:String = "htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={\"locality\":{\"$eq\":\"miami\"}}" 
+0

Oui, il a travaillé quand j'ai commencé avec les guillemets. Je vous remercie. – Suhas