如何将以下数据的参数作为alamofire参数发送?
data : {"username":"username","password":"password"}
我想通过alamofire参数实现关注,但是我没有做到这一点。
我正在做的是:
let parameter: Parameters = ["data": ["username": "\(textFieldUserName.text!)", "pass": "\(textFieldPassword.text!)"]]
Alamofire.request(loginUrl, method: .post, parameters: parameter,encoding: JSONEncoding.default, headers: nil).responseJSON {
response in
但它不起作用。
答案 0 :(得分:1)
在查看您使用的api之后:该api期望数据值是字符串而不是对象。 您将需要执行以下操作:但这可以重构为更加简洁,这只是为了说明发生了什么。
创建数据参数:
let data: Parameters = [
"username": "\(textFieldUserName.text!)",
"pass": "\(textFieldPassword.text!)"
]
然后将其转换为字符串:以下是将json转换为字符串的快速搜索,但是在我得到第一个答案时,您需要仔细检查一下。
let string = stringify(json: data, prettyPrinted: false)
let parameters: Parameters = [
"data": string
]
,然后在请求中将编码设置为:encoding: URLEncoding.default
Alamofire.request(
loginURL,
method: .post,
parameters: parameters,
encoding: URLEncoding.default,
headers: nil).responseJSON { (responseData) -> Void in
if responseData.result.value != nil {
//do something with data
}
}
func stringify(json: Any, prettyPrinted: Bool = false) -> String {
var options: JSONSerialization.WritingOptions = []
if prettyPrinted {
options = JSONSerialization.WritingOptions.prettyPrinted
}
do {
let data = try JSONSerialization.data(withJSONObject: json, options: options)
if let string = String(data: data, encoding: String.Encoding.utf8) {
return string
}
} catch {
print(error)
}
return ""
}
我也将尝试避免强行打开textfield.text属性,除非您事先验证了它们的值 并且由于api调用是http,因此您还需要在info.plist中启用它:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>