不工作 – 在Swift 3/4中以编程方式在Api中注册用户

我正在尝试在我的API中注册用户。 当我在Postman中执行此操作时,它会注册用户并将状态返回为true,并将消息作为User Created返回,但是当我尝试以编程方式从swift创建新用户时,它始终显示User已存在(给出错误响应),即使它没有注册。 我正在使用Swift 4 Xcode 9。

几乎相同的代码工作适用于登录Api,但不适用于用户注册。 此外,在我通过Api中的邮递员注册该用户后,它对于Login非常适用。 所以我没有得到RegisterUser的问题。 代码显示没有错误。

这是我注册用户的代码:

import UIKit import SwiftyJSON import Alamofire import SwiftKeychainWrapper class RegisterUserViewController: UIViewController { @IBOutlet weak var firstNameTextField: UITextField! @IBOutlet weak var lastNameTextField: UITextField! @IBOutlet weak var emailAddressTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! @IBOutlet weak var repeatPasswordTextField: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func cancelButtonTapped(_ sender: Any) { print("Cancel button tapped") self.dismiss(animated: true, completion: nil) } @IBAction func signupButtonTapped(_ sender: Any) { print("Sign up button tapped") // Validate required fields are not empty if (firstNameTextField.text?.isEmpty)! || (lastNameTextField.text?.isEmpty)! || (emailAddressTextField.text?.isEmpty)! || (passwordTextField.text?.isEmpty)! { // Display Alert message and return displayMessage(userMessage: "All fields are quired to fill in") return } // Validate password if ((passwordTextField.text?.elementsEqual(repeatPasswordTextField.text!))! != true) { // Display alert message and return displayMessage(userMessage: "Please make sure that passwords match") return } let userdefault = UserDefaults.standard userdefault.set(emailAddressTextField.text, forKey: "email_id") //userdefault.set(emailAddressTextField, forKey: "email_id") print("email_id",emailAddressTextField.text) //print("email_address",userdefault.string(forKey: "email_id")) var request = URLRequest(url: URL(string: "http://horn.hostingduty.com/api/v1/app_adduser")!) request.httpMethod = "POST" print("its working") let postString = "first_name=\(firstNameTextField.text)"; "last_name=\(lastNameTextField.text)"; "email_id=\(emailAddressTextField.text)"; "password=\(passwordTextField.text)" request.httpBody = postString.data(using: .utf8) let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error print("error=\(error)") return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is \(httpStatus.statusCode)") print("response = \(response)") } var responseString = String(data: data, encoding: .utf8) print("responseString = \(responseString)") if(responseString?.contains("true"))!{ DispatchQueue.main.async { let homePage = self.storyboard?.instantiateViewController(withIdentifier: "HomePageViewController") as! SWRevealViewController let appDelegate = UIApplication.shared.delegate appDelegate?.window??.rootViewController = homePage } print("status = true") } else{ DispatchQueue.main.async { self.showToast(message: "Already exists !! ") } print("Status = false") } } task.resume() } func displayMessage(userMessage:String) -> Void { DispatchQueue.main.async {} let alertController = UIAlertController(title: "Alert", message: userMessage, preferredStyle: .alert) let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in // Code in this block will trigger when OK button tapped. print("Ok button tapped") DispatchQueue.main.async { self.dismiss(animated: true, completion: nil) } } alertController.addAction(OKAction) self.present(alertController, animated: true, completion:nil) } } 

  func loginApi() { let userName = userNameText?.text ?? "" print(userName) let password = passwordText?.text ?? "" print(password) let params = [ "emailId" : userName as Any, "password" : password as Any, ] Alamofire.SessionManager.default.request("your url", method: .post, parameters: params, encoding: URLEncoding(destination: .methodDependent)) .validate(statusCode: [200, 201]) .responseJSON { [unowned self] (response) in switch(response.result) { case .success: guard let json = response.result.value as! [String:Any]? else{ return} print("Response \(json)") if let data = json["data"] as! [String:Any]?{ let email_id : String = email_id userdefault.set(emailAddressTextField.text, forKey: "email_id") print(email_id) UserDefaults.standard.synchronize() let homePage = self.storyboard?.instantiateViewController(withIdentifier: "HomePageViewController") as! SWRevealViewController let appDelegate = UIApplication.shared.delegate appDelegate?.window??.rootViewController = homePage } } } case .failure(let err): self.showNormalAlertWithTitle(NSLocalizedString("Alert!", comment: ""), message:NSLocalizedString("Please enter valid username or password", comment: "")) print("\(err.localizedDescription)") break } } } 

您应该在请求中添加标头并发送正确的url编码键/值

 request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type"); 

并将您的post字符串更改为

 let postString = "first_name=\(firstNameTextField.text)&" + "last_name=\(lastNameTextField.text)&" + "email_id=\(emailAddressTextField.text)&" + "password=\(passwordTextField.text)" request.httpBody = postString.data(using: .utf8) 

UPDATE

 func callApi(){ var request = URLRequest(url: URL(string: "http://horn.hostingduty.com/api/v1/app_adduser")!) request.httpMethod = "post" request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type") print("its working") let postString = "first_name=test&" + "last_name=test&" + "email_id=test@abc.vom&" + "password=123&" request.httpBody = postString.data(using: .utf8) let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error print("error=\(error?.localizedDescription)") return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is \(httpStatus.statusCode)") print("response = \(response)") } var responseString = String(data: data, encoding: .utf8) print("responseString = \(responseString)") if(responseString?.contains("true"))!{ print("status = true") } else{ print("Status = false") } } task.resume() }