带有以下类型的Alamofire传递参数

问题描述 投票:-1回答:3

enter image description here

如何在alamofire请求中以参数形式发送此数据作为参数?

我正在做的是:

enter image description here

请求服务:

enter image description here

我得到这个:

enter image description here

我应该通过发送以下数据来获得此信息:

enter image description here

ios swift alamofire alamofire-request
3个回答
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>

0
投票

您可以使用字典

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)
        }

0
投票

您应该使用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.

© www.soinside.com 2019 - 2024. All rights reserved.