花了几个小时没有成功。
我正在使用Alamofire对后端服务器进行HTTP POST,这需要在请求中提供一些参数。
我已成功命中服务器,但服务器响应500,但未发送任何参数?

我尝试了大多数SO解决方案(更改编码类型,将参数设置为NSDict等),但没有成功。

任何帮助,不胜感激。

PS与Alamofire 4一起使用Swift3

码:

let params: [String: String] = ["deviceID": "Some device ID",
                  "email": "email","password": "password","userid": "1234",
                  "username":"gordon"]

let request_params: Parameters = ["LoginUser" : params]

let url = "https://myserver/LogIn" as String

Alamofire.request(url, method: .post, parameters: request_params, encoding:  URLEncoding.default, headers: [
        "Content-Type": "application/x-www-form-urlencoded"
        ]).responseString { (response:DataResponse<String>) in

        switch(response.result) {
        case.success(let data):
            print("success",data)
            print(response.response)
        case.failure(let error):
            print("Failed!",error)

        }

    }

更新:

下面是POST的正文,看起来像是存在问题的地方:

Alamofire POST正文(来自上面的代码)-
(LoginUser%5BdeviceID%5D = 12345&LoginUser%5Bemail%5D = gordon%40test.com&LoginUser%5Buserid%5D = 00000000-0000-0000-0000-000000000000&LoginUser%5Bpassword%5D = testPassword&LoginUser%5Busername%5D = gordon)

它应该类似于(忽略编码值):

这是一个功能齐全的后车身-
LoginUser =%7B%22deviceID%22%3A%22%22%2C%22email%22%3A%22gordon%40test.com%22%2C%22password%22%3A%22testPassword%22%2C%22userid%22%3A %2200000000-0000-0000-0000-000000000000%22%2C%22用户名%22%3A%22gordon%22%7D

如您所见,Alamofire帖子似乎将LoginUser连接到每个属性的开头?在启动时还缺少LoginUser =?

最佳答案

尝试使用JSONEncoding.default而不是URLEncoding.default

关于ios - POST中Alamofire 4缺少参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47211363/

10-12 07:03