Параметры прохождения Alamofire со следующим типом

Как отправить эти данные как параметр в запросе 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.

Другие вопросы по тегам