2017-09-21 9 views
0

POST APIを呼び出していますが、ポスト値が認識されません。 私はPOSTの本文の値が認識されない

 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) 
    } 
をloginメソッドを呼び出しています

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) 
     } 
    } 

を扱うAPI用alamofireを使用しています

問題を見つけるのを手伝ってください。

APIは私にユーザー名またはパスワードが空であるというエラー応答を出しています。

+0

ログインメソッドを呼び出す場所にコードを追加できますか? – Malik

+0

@vijeeshエラーは、ユーザー名またはパスワードが空であることを示します。あなたが設定しているパラメータを持つ変数postDataDctは、 "username"と "mobile"フィールドだけを持ち、パスワードフィールドを持っていません。 –

+0

投稿データの合計機能を追加できますか? – Rishi

答えて

1

クロスチェックあなたの鍵:

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

あなたがusernamepassword応答に応じてになりますusernameとそれはキーのように思えるmobileで要求を作っているあなたは名またはパスワードを取得しています空です。

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

提案:Alamofireは、独自のパラメータクラスに試してみる投稿するための

そのネイティブスウィフト の対応を使用し、スウィフトにNSMutableDictionaryを使用しないでください、辞書

+0

Swiftで 'NSMutableDictionary'を使用しないでください。ネイティブSwiftの対応する' Dictionary'を使用してください。 –

+0

ありがとう、ありがとう、ありがとう、ここで私は関連する質問の問題を示しています! –

+0

また、私は質問を更新します –

1

このようにして、サーバー上のキーと同じキーを使ってシェアを作成します。

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

私は、APIがフォームデータだけをサポートしていると考えました。 – vijeesh

関連する問題