2016-03-21 26 views
0

Görünüşte bir String'in nasıl oluşturulacağından emin değilsiniz. Bendizesi yanlış biçimde gönderilmiştir

eylemi göndermek istiyorum = kategori & data = { "id": 2, "type": "levha"} bir istek bir parameterstring olarak

. XCode böyle inşa ettik:

let actionstring = "\"id\":2,\"type\":\"sheet\"" 
parameters: ["action": "category", "data": actionstring] 

Ben bir yazdırma (actionstring) yaparsanız ben istediğimi tam olarak ne olsun, ama ben isteği göndermek zaman şuna benzer:

etki = kategori & verileri =% 22id% 22% 3A2% 2C% 22type% 22% 3A% 22sheet% 22 URL yüzde kodlanmış bir dize için doğrudur

+1

Bu sorun size neden bu? – Wain

+0

İsteği nasıl gönderiyorsunuz? Bir URL’de ise, bu cevaba bakın: [URL'de izin verilen karakterler] (http://stackoverflow.com/a/1856809/887210) – ColGraff

+0

Bize 'actionString' kaçının nasıl kaçtığını göstermediniz (ve Belli ki, yüzde kaçmak için birşeyler yaptın), ama istediğini söylediğin '' '' '' '' '' '' '}. Bunları actionst category & data = {"id": 2, "": "sheet"} "gibi görünmesini gerçekten istiyorsanız, bunları 'actionString' öğesine eklemek isteyebilirsiniz. Açıkçası, yine de öyle olmasını istediğinden emin değilim. Genellikle, web hizmetinizde standart olmayan bir şey yapmıyorsanız, aşağıda gösterildiği gibi "action = category & data [id] = 2 & data [type] = sheet" gibi bir mesaj gönderirsiniz. Web servisiniz hakkında daha fazla bilgi vermeden söylemek zor. – Rob

cevap

1

:

import Foundation 

let actionstring = "\"id\":2,\"type\":\"sheet\"" 
let parameters = ["action": "category", "data": actionstring] 

var string = "" 
for (index, parameter) in parameters.enumerate() { 
    string.appendContentsOf("\(parameter.0)=\(parameter.1)") 
    if index + 1 < parameters.count { string.append(Character("&")) } 
} 

print(string.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())) 
// => Optional("action=category&data=%22id%22%3A2,%22type%22%3A%22sheet%22") 
+1

FYI, 'URLHostAllowedCharacterSet', kaçan yüzde için yeterli değil. Eğer değer bir +, ya da bir '&' içeriyorsa, bu, bu geçişlerin çıkmalarına izin vermeyecekti ki bu problemli olurdu. Bu karakterlerin olmayacağını biliyorsanız, 'URLHostAllowedCharacterSet' ile uzaklaşabilirsiniz, ancak genellikle kendi karakter kümenizi el ile oluşturmalı ya da 'URLHostAllowedCharacterSet' değişken biçimini oluşturmalı ve uygun karakterleri kaldırmalısınız. Http://stackoverflow.com/a/35912606/1271826 adresine bakın. – Rob

+1

İyi bir çağrı, orada olanların farkında değildim. Teşekkürler! – ColGraff

1

Genellikle data bir x-www-form-urlencoded istek web hizmeti tarafından bir ilişkisel dizi olarak alınacak isterseniz yaparım: data sonuçlanacaktır

action=category&data[id]=2&data[type]=sheet 

bir ilişkisel dizi olarak alınıyor.

Ve diğerleri category, 2 veya sheet değerleri herhangi ayrılmış karakterler olsaydı (özellikle, uzay, bu değerler içine + veya & sorunlara neden olabilir), daha önce belirttiğimiz gibi, sen yüzde ediyorum o kaçış. Bu bir application/json isteği inşa etmek gibi

başka yolu

yapılandırılmış veri göndermek için. Sadece web servisinizin beklediği şeylere bağlıdır (web hizmeti uygulaması bu iki tür talep için farklı olduğundan). Sorunuzdan web hizmetinizin x-www-form-urlencoded isteğini beklediğini, ancak JSON isteğinin gösterilmesini istiyorsanız, bize bildirin.

İlgili konular