POST身体值无法识别

时间:2017-09-21 07:17:15

标签: ios iphone swift post swift3

我正在调用POST API但是帖子值未被识别。 我正在使用alamofire进行API处理

 public func POSTRequest(postData : AnyObject?,APIName : String?,headers: HTTPHeaders?,success:@escaping (JSON) -> Void, failure:@escaping (String,String) -> Void)
        {
            let url = URL(string: APIName!)!
            var urlRequest = URLRequest(url: url)

        urlRequest.httpBody = postData as? Data
        urlRequest.httpMethod = "POST"
        urlRequest.allHTTPHeaderFields = headers

        let manager = Alamofire.SessionManager.default
        manager.session.configuration.timeoutIntervalForRequest = 30.0
        manager.request(urlRequest).responseJSON { ( responseData) -> Void in

            if responseData.result.isSuccess {
                let statusCode = responseData.response?.statusCode
                if(statusCode == 200){
                    let resJson = JSON(responseData.result.value!)
                    success(resJson)
                }
                else {
                    let resJson = JSON(responseData.result.value!)
                    let errorMsg = resJson["message"].stringValue
                    let errorTitle = resJson["title"].stringValue
                    failure(errorMsg,errorTitle)
                }
            }
            if responseData.result.isFailure {
                let error : Error = responseData.result.error!
                failure(error.localizedDescription,"")
            }
        }
    }



// MARK: Login
    func userLogin(postData: AnyObject, completionHandler:@escaping (JSON) -> Void,failure:@escaping (String,String) -> Void)
    {
        let apiName = GlobalConstants.rootUrl + GlobalConstants.loginUrl

        let httpHeaders: HTTPHeaders = getHeaders()

        ApiRequestHandler.shared.POSTRequest(postData: postData, APIName: apiName, headers: httpHeaders, success: { (JSON) in
            print("JSON \(JSON)")
            completionHandler(JSON)
        })
        { (Errormsg,ErrorTitle) in
            print("Error \(Errormsg)")
            failure(Errormsg,ErrorTitle)
        }
    }

我在这里创建帖子数据

        let postDataDct = NSMutableDictionary()
        postDataDct.setValue(self.userNameTextField.text, forKey: "username")
        postDataDct.setValue(self.phoneNumberTextField.text, forKey: "mobile")

        guard let data = try? JSONSerialization.data(withJSONObject: 
        postDataDct , options: JSONSerialization.WritingOptions.prettyPrinted) 
        as NSData else {
            return;
        }
        print(NSString(data: data as Data, encoding: 
        String.Encoding.utf8.rawValue)! as String)

此处创建标题

func getHeaders() -> HTTPHeaders {
    let headers: HTTPHeaders = ["Content-Type": "application/json" ,"Authorization" : "Basic dGFuaXNocWdfgaFF%waXJvb3Q6dzBEMFlkSnR0"]
    return headers
}

我在这里调用登录方法

   ApiManager.shared.userLogin(postData: postDataDct as AnyObject, completionHandler: { (JSON) in
      print(JSON)
    })
    { (ErrorMsg, ErrorTitle) in
        print(ErrorMsg)
    }

请帮我找到问题。

API给我错误响应,说用户名或密码为空。

2 个答案:

答案 0 :(得分:1)

交叉检查您的密钥:

let postDataDct = NSMutableDictionary()
postDataDct.setValue(self.userNameTextField.text, forKey: "username")
postDataDct.setValue(self.phoneNumberTextField.text, forKey: "mobile")

您正在使用usernamemobile发出请求根据您的回复,按键似乎是 usernamepassword 得到名称或密码为空。

let postDataDct = NSMutableDictionary()
postDataDct.setValue(self.userNameTextField.text, forKey: "username")
postDataDct.setValue(self.phoneNumberTextField.text, forKey: "password")

建议:

  

不要在Swift中使用NSMutableDictionary,使用其原生的Swift   对应词典

答案 1 :(得分:1)

对于发布Alamofire有自己的参数类尝试使用与服务器上的确切键一样使用make share来使用它。

let parameter: Parameters = [
        "Email": txtfld_email.text!,
        "Password": txtfld_password.text!    
                              ]