首页 > 解决方案 > 发送请求时从数据库中删除了 Swift Alamofire“+”号

问题描述

我们遇到了这个奇怪的问题。一旦我们发送我们的请求,“+”就会在数据库中删除。 在此处输入图像描述

但是如果我打印response.data,我可以看到“+”在那里(使用 Alamofire 4.9.1) 在此处输入图像描述

删除“+”的可能原因是什么?

这是我设置请求和标头的方式: 在此处输入图像描述 在此处输入图像描述

标签: iosswiftalamofire

解决方案


为了未来的读者,application/x-www-form-urlencoded请求必须是“百分比编码”,将+字符替换为%2B. 但实际上有很多字符可能需要编码,所以通常最好使用 Alamofirerequest方法Parameters,它会为您处理所有这些细节。例如在 Alamofire 4.9.1 中:

let headers: HTTPHeaders = [
    "Authorization": authorization
]

let parameters: Parameters = [
    "grant_type": "password",
    "username": username,
    "password": password
]

Alamofire.request(url, method: .post, parameters: parameters, headers: headers).responseJSON { response in
    switch response.result {
    case .failure(let error): print(error)
    case .success(let value): print(value)
    }
}

或者在 Alamofire 5 及更高版本中,可以使用AF而不是Alamofire

AF.request(url, method: .post, parameters: parameters, headers: headers).responseJSON { response in
    switch response.result {
    case .failure(let error): print(error)
    case .success(let value): print(value)
    }
}

请参阅 Alamofire 使用文档:带有 URL 编码参数的 POST 请求


如果您真的想自己构建httpBodyURLRequest而不仅仅是对+字符进行百分比编码,您可以考虑更通用的百分比编码例程,如JSON 请求发送空数据中所示。这个想法与 Alamofire 的相同Parameters,即httpBody从字典构建。


推荐阅读