Параметры прохождения Alamofire со следующим типом
3 ответа
Взглянув на 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>
Вы можете использовать словарь
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)
}
Вы должны использовать 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.