字符串格式错误发送

时间:2016-03-21 16:49:49

标签: ios swift query-parameters

不确定如何在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

2 个答案:

答案 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作为关联数组被接收。

正如其他人所指出的,如果2sheet+值包含任何保留字符(特别是空格,&或{{ 1}}这些值内部可能导致问题),你百分之百逃避这些。

发送这样的结构化数据的另一种方法是构造application/json请求。它只取决于您的Web服务期望的内容(因为这两种类型的请求的Web服务实现不同)。我假设您的Web服务正在等待x-www-form-urlencoded请求,但如果您需要演示JSON请求,请告诉我们。

相关问题