不确定如何在swift中构建一个String。我想发送
行动=类别&安培;数据= { “ID”:2, “类型”: “片材”}
作为请求中的参数字符串。 在XCode中我构建它是这样的:
let actionstring = "\"id\":2,\"type\":\"sheet\""
parameters: ["action": "category", "data": actionstring]
如果我打印(actionstring),我会得到我想要的,但是当我发送请求时,它看起来像这样:
行动=类别&安培;数据=%22id%22%3A2%2C%22type%22%3A%22sheet%22
答案 0 :(得分:1)
对于URL百分比编码的字符串,这是正确的:
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 :(得分:1)
通常,如果您希望x-www-form-urlencoded
请求中的Web服务将action=category&data[id]=2&data[type]=sheet
作为关联数组接收,您可以执行以下操作:
data
这将导致category
作为关联数组被接收。
正如其他人所指出的,如果2
,sheet
或+
值包含任何保留字符(特别是空格,&
或{{ 1}}这些值内部可能导致问题),你百分之百逃避这些。
发送这样的结构化数据的另一种方法是构造application/json
请求。它只取决于您的Web服务期望的内容(因为这两种类型的请求的Web服务实现不同)。我假设您的Web服务正在等待x-www-form-urlencoded
请求,但如果您需要演示JSON请求,请告诉我们。