-1

如何将参数作为以下数据的 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

但它不工作。

在此处输入图像描述

4

1 回答 1

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>
于 2019-09-30T18:26:03.073 回答