2017-04-27 5 views
0

私はAlamofireを試してみました。それは私にとってはうまくいきません。私は最終的にHTTP GETの動作を得ましたが、http POSTを動作させる必要があります。私たちのPOST APIは、その中に必要なすべてのデータを持つRequestオブジェクトを取ります。バックエンドの開発者に、KEY-VALUEペアのJSON(埋め込みオブジェクト/配列なし)を提供するように依頼しました。これにより、スピーディコードでDictionaryを使用してjsonに変換してリクエストを送信できます。私が必要とするのは、以下のコードをPOSTに変換することだけです。これをJSONのシリアル化されたオブジェクトでPOST呼び出しに変換する方法

私の以前の質問はあまり役に立ちませんでした。 NSInvalidArgumentException Invalid type in JSON write DemographicsPojo Swift 3.0, Alamofire 4.0 Extra argument 'method' in call

私はAlamofireをあきらめました。私はFoundationクラスを使いたい。単純な基本的かつ基本的な生活の方法:)。

func callWebService(url : String) { 
     // Show MBProgressHUD Here 
     var config        :URLSessionConfiguration! 
     var urlSession       :URLSession! 

     config = URLSessionConfiguration.default 
     urlSession = URLSession(configuration: config) 

     // MARK:- HeaderField 
     let HTTPHeaderField_ContentType   = "Content-Type" 

     // MARK:- ContentType 
     let ContentType_ApplicationJson   = "application/json" 

     //MARK: HTTPMethod 
     let HTTPMethod_Get      = "GET" 

     let callURL = URL.init(string: url) 

     var request = URLRequest.init(url: callURL!) 

     request.timeoutInterval = 60.0 // TimeoutInterval in Second 
     request.cachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData 
     request.addValue(ContentType_ApplicationJson, forHTTPHeaderField: HTTPHeaderField_ContentType) 
     request.httpMethod = HTTPMethod_Get 

     let dataTask = urlSession.dataTask(with: request) { (data,response,error) in 
      if error != nil{ 
       print("Error **") 

       return 
      } 
      do { 
       let resultJson = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] 
       print("Result",resultJson!) 
      } catch { 
       print("Error -> \(error)") 
      } 
     } 

     dataTask.resume() 
     print("..In Background..") 
    } 
+0

POSTリクエストを送信するコードを書き直すように頼んでいますか?あなた自身でそれを試してください。それがうまくいかない場合よりも助けを求めてください。 –

+0

私はこれを言うとき私を信頼し、私はそれを試して失敗しました。私は最終的にGETを行っていますが、POSTは機能しません。 – Siddharth

答えて

1

JSON文字列とAPI URLをこの関数に渡すだけです。 POSTの完全なコード。

func POST(api:String,jsonString:String,completionHandler:@escaping (_ success:Bool,_ response:String?,_ httpResponseStatusCode:Int?) -> Void) { 

    let url = URL(string: api) 

    var request: URLRequest = URLRequest(url: url!) 

    request.httpMethod = "POST" 

    request.setValue("application/json", forHTTPHeaderField:"Content-Type") 
    request.timeoutInterval = 60.0 

    //additional headers 
    if let token = Helper.readAccessToken() { 
     request.setValue("\(token)", forHTTPHeaderField: "Authorization") 
    } 

    let jsonData = jsonString.data(using: String.Encoding.utf8, allowLossyConversion: true) 
    request.httpBody = jsonData 

    let task = URLSession.shared.dataTask(with: request) { 
     (data: Data?, response: URLResponse?, error: Error?) -> Void in 

     var responseCode = 0 
     if let httpResponse = response as? HTTPURLResponse { 
      responseCode = httpResponse.statusCode 
      print("responseCode \(httpResponse.statusCode)") 
     } 

     if error != nil { 
      completionHandler(false, error?.localizedDescription,nil) 

     } else { 
      let responseString = String(data: data!, encoding: .utf8) 
      completionHandler(true, responseString, responseCode) 
     } 
    } 

    task.resume() 
} 
関連する問題