Ios 状态代码应为2xx,但在swift中为400

Ios 状态代码应为2xx,但在swift中为400,ios,swift,Ios,Swift,我有一个登录API并使用URLSession来点击API,但我得到了状态码400,这是我的代码- let deviceType = "IOS" let deviceToken = "654321" @IBAction func onClickLogIn(_ sender: Any) { guard let email = self.emailTf.text else { r

我有一个登录API并使用URLSession来点击API,但我得到了状态码400,这是我的代码-

 let deviceType = "IOS"
        let deviceToken = "654321"
     @IBAction func onClickLogIn(_ sender: Any) {
            guard let email = self.emailTf.text else {
                return
            }
            guard let password = self.pwdTf.text else {
                return
            }
            let url = URL(string: "http://example/api/login")!
            var request = URLRequest(url: url)
            request.setValue("application/json", forHTTPHeaderField: "Content-Type")
            request.httpMethod = "POST"
    
            let parameters: [String: Any] = [
                "username": email,
                "password": password,
                "deviceType" : deviceType,
                "deviceToken" : deviceToken
            ]
            request.httpBody = parameters.percentEncoded()
            URLSession.shared.dataTask(with: request) { data, response, error in
                guard let data = data,
                    let response = response as? HTTPURLResponse,
                    error == nil else {
                        print("error", error ?? "Unknown error")
                        return
                }
                
                guard (200 ... 299) ~= response.statusCode else {
                    print("statusCode should be 2xx, but is \(response.statusCode)")
                    print("response = \(response)")
                    return
                }
                do {
                    let json = try JSONSerialization.jsonObject(with: data, options: [])
                    print(json)
                } catch {
                    print(error)
                }
    
                
                let responseString = String(data: data, encoding: .utf8)
                print("responseString = \(String(describing: responseString))")
            }.resume()
            
    
        }

当我使用断点并键入PO request.httpBody时,它会在httpBody中显示nil并获取状态代码400。如果我出错,请任何人帮助我设置响应数据库类型:

“application/x-www-form-urlencoded”、“多部分/表单数据”、“application/json”、“text/plain”、“text/xml”


向后端开发人员询问API类型,它是来自数据API还是原始Json API。基于此,您必须进行编码

您是为表单数据编写的

下面是带有原始json api实现的post api

let parameters: [String: AnyObject] = [
    "IdQuiz" : 102,
    "IdUser" : "iosclient",
    "User" : "iosclient",
    "List": [
        [
            "IdQuestion" : 5,
            "IdProposition": 2,
            "Time" : 32
        ],
        [
            "IdQuestion" : 4,
            "IdProposition": 3,
            "Time" : 9
        ]
    ] ]

Alamofire.request(.POST, "http://myserver.com", parameters: parameters, encoding: .JSON)
    .responseJSON { request, response, JSON, error in
        print(response)
        print(JSON)
        print(error)
    }

您已经指定了JSON编码的内容,但似乎并没有在任何地方将内容编码为JSON。
percentEncoded
函数做什么?@Paulw11这里是函数-->扩展字典{func percentEncoded()->数据{return map{key,let-escapedKey=“(key)”中的值。addingpercentencodeding(withAllowedCharacters:.urlQueryValueAllowed)??“let-escapedValue=“(value)”.addingPercentEncoding(使用AllowedCharacters:.urlQueryValueAllowed)??“返回escapedKey+”=“+escapedValue}.joined(分隔符:&”).data(使用:.utf8)}不生成json。后端是否需要json?您没有将
参数
转换为json格式。