Alamofire 通过以下类型传递参数
Alamofire Passing Parameter With following type
如何将此数据作为参数发送到 alamofire 请求中作为参数?
我正在做的是:
请求服务:
我明白了:
我应该通过发送以下数据方式来获得这个:
您应该使用 Alamofire.request
定义包含 parameters: Parameters
的函数。如下所示。
Alamofire.request(.POST, "http://localhost:3030/", headers: [ACCESS_TOKEN:token, "Content-Type":"application/x-www-form-urlencoded" ],
parameters:["formData2" : formblabla, "formData1" : formblabla],
encoding: .URL).response(completionHandler: {
(request, response, data, error) in
})
对于您的问题还有另一个解决方法:
您 postman
中的数据设置错误
格式是{ "username": "blabla", "pass": "xxx" }
是完全错误的。
搜索 Postman
的 post 数据的文档
您必须将所有属性单独放置为 Key-Value pair.
你可以使用字典
let parameters = ["username": "xxxxx", "pass":"xxx"]
Alamofire.request(YOURURL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers:nil ).responseJSON { response in
switch response.result {
case .success:
let result = response.result.value
let json = result as Dictionary
print(json)
case .failure(let error):
let responseString = String(data: response.data, encoding:.utf8)
}
查看您正在使用的 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>
如何将此数据作为参数发送到 alamofire 请求中作为参数?
我正在做的是:
请求服务:
我明白了:
我应该通过发送以下数据方式来获得这个:
您应该使用 Alamofire.request
定义包含 parameters: Parameters
的函数。如下所示。
Alamofire.request(.POST, "http://localhost:3030/", headers: [ACCESS_TOKEN:token, "Content-Type":"application/x-www-form-urlencoded" ],
parameters:["formData2" : formblabla, "formData1" : formblabla],
encoding: .URL).response(completionHandler: {
(request, response, data, error) in
})
对于您的问题还有另一个解决方法:
您 postman
中的数据设置错误
格式是{ "username": "blabla", "pass": "xxx" }
是完全错误的。
搜索 Postman
您必须将所有属性单独放置为 Key-Value pair.
你可以使用字典
let parameters = ["username": "xxxxx", "pass":"xxx"]
Alamofire.request(YOURURL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers:nil ).responseJSON { response in
switch response.result {
case .success:
let result = response.result.value
let json = result as Dictionary
print(json)
case .failure(let error):
let responseString = String(data: response.data, encoding:.utf8)
}
查看您正在使用的 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>