2017-07-19 178 views
1

我曾尝试使用以下代码来处理请求,但结果为400错误。 API由标题和正文组成。标题有两个字段,即“授权”和“内容类型”。正文格式被添加到下面的参数。如何在Alamofire中请求带有body和header的JSON?

enter image description here

enter image description here

func file(sender: abc){ 

     let baseUrl = "url” 

     let params: [String : Any] = [ 
      "profile": [ 
       “Type": [ 
        " Real Estate", 
        "Estater", 
        "Construction", 
        "Entertainment" 
       ], 
       "Size": [ 
        "large", 
        “small” 
       ], 
       "Level": [ 
        “A”, 
        “B” 
       ], 
       “Name” : [ 
        “John”, 
        “Harry” 
       ] 
      ] 
     ] 

     let header = [ 
      "Authorization" : "bearer e2ff3aa3-63a3-41d1-bc5a-3e8c88adeaaa", 
      "Content-Type" : "application/json" 
     ] 

//  var request = URLRequest(url: URL(string:baseUrl)!) 
//  request.httpMethod = HTTPMethod.post.rawValue 
//  request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
//  request.addValue("bearer e2ff3aa3-63a3-41d1-bc5a-3e8c88adeaaa", forHTTPHeaderField: "Authorization") 
//  let data = try! JSONSerialization.data(withJSONObject: params as Any, options:JSONSerialization.WritingOptions.prettyPrinted) 
//   
//  request.httpBody = data 

     Alamofire.request("\(baseUrl)", method: .post, parameters: params, headers:header).responseJSON { response in 
      print(response.request ?? "no request") // original URL requ est 
      print(response.response ?? "no response") // HTTP URL response 
      print(response.data ?? "no data")  // server data 
      print(response.result) // result of response serialization 
      print(response.response?.statusCode ?? "noCode") 

      if(response.response?.statusCode != nil){ 
       switch response.response!.statusCode { 
       case 200: 
        print("Success") 
        let json = JSON(data: response.data!) 
        print(json) 
        sender.onSuccessCall() 
       case 400: 
        print("Error in authentication") 
       case 401: 
        print("Error authentication object was not found") 
       default: 
        print("dEfault") 
       } 
      } 
     } 
    } 

请帮助解决售后服务这个问题。

+1

,我们不知道你的API希望你在做什么你的工作 –

+0

我只是想通过POST请求JSON数据,但它说400错误。我的代码中有任何错误吗? –

+1

不知道你的API期望什么,我们不能帮助。请包括一个成功的请求在你的问题,即使它不是从迅速(即邮递员请求,卷曲请求等)。 –

回答

0

有时我们需要URLEncoding.httpBody类型POST方法希望它可以帮助你在的baseUrl

let headers = [ 
        // "Content-Type": "application/x-www-form-urlencoded" // try this if its ok then use this otherwise use "application/json" 
        // "Content-Type" : "application/json" 
       ] 
      let parameters = [ 

       ] 

      Alamofire.request("urlString", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in 

       switch(response.result) { 
       case.success(let data): 
        print("success",data) 
       case.failure(let error): 
        print("Not Success",error) 
        self.view.makeToast(message: "Server Error!!") 
       } 

      } 
+0

谢谢@Bikesh Thakur,但它不起作用这里。 –

+0

你得到了什么错误 –

+0

,你是否把“授权”:“承载e2ff3aa3-63a3-41d1-bc5a-3e8c88adeaaa”在内容类型的标题,并试过这 –

0

使用URLConvertible输入url

解决方案低于:

func file(sender: abc){ 

     let baseU = URL(string:"url") 
     let baseUrl = baseU as! URLConvertible 

     let params: [String : Any] = [ 
      "profile": [ 
       "Type": [ 
       " Real Estate", 
       "Estater", 
       "Construction", 
       "Entertainment" 
       ], 
       "Size": [ 
       "large", 
       "small" 
       ], 
       "Level": [ 
       "A", 
       "B" 
       ], 
       "Name" : [ 
       "John", 
       "Harry" 
       ] 
      ] 
     ] 

     let header = [ 
      "Authorization" : "bearer e2ff3aa3-63a3-41d1-bc5a-3e8c88adeaaa", 
      "Content-Type" : "application/json" 
     ] 

     //  var request = URLRequest(url: URL(string:baseUrl)!) 
     //  request.httpMethod = HTTPMethod.post.rawValue 
     //  request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
     //  request.addValue("bearer e2ff3aa3-63a3-41d1-bc5a-3e8c88adeaaa", forHTTPHeaderField: "Authorization") 
     //  let data = try! JSONSerialization.data(withJSONObject: params as Any, options:JSONSerialization.WritingOptions.prettyPrinted) 
     // 
     //  request.httpBody = data 

     Alamofire.request(baseUrl, method: .post, parameters: params, headers:header).responseJSON { response in 
      print(response.request ?? "no request") // original URL requ est 
      print(response.response ?? "no response") // HTTP URL response 
      print(response.data ?? "no data")  // server data 
      print(response.result) // result of response serialization 
      print(response.response?.statusCode ?? "noCode") 

      if(response.response?.statusCode != nil){ 
       switch response.response!.statusCode { 
       case 200: 
        print("Success") 
        let json = JSON(data: response.data!) 
        print(json) 
        sender.onSuccessCall() 
       case 400: 
        print("Error in authentication") 
       case 401: 
        print("Error authentication object was not found") 
       default: 
        print("dEfault") 
       } 
      } 
     } 
} 
+0

谢谢,@Sakir Sherasiya。我试试它,但不起作用。 –

+0

你得到了什么错误 –

+0

它显示了400状态码 –

1

我解决了这个问题,下面添加了正确的方法。

func file(sender: abc){ 

    let params: [String : Any] = [ 
     "profile": [ 
      “Type": [ 
       " Real Estate", 
       "Estater", 
       "Construction", 
       "Entertainment" 
      ], 
      "Size": [ 
       "large", 
       “small” 
      ], 
      "Level": [ 
       “A”, 
       “B” 
      ], 
      “Name” : [ 
       “John”, 
       “Harry” 
      ] 
     ] 
    ] 

var request = URLRequest(url: URL(string:”url string”)!) 
    request.httpMethod = HTTPMethod.post.rawValue 
    request.setValue("bearer 5bac059b-eb2b-4e1b-914a-9de5b6a58577", forHTTPHeaderField: "Authorization") 
    request.setValue("application/json", forHTTPHeaderField: "Content-Type") 

    let data = try! JSONSerialization.data(withJSONObject: params as Any, options:JSONSerialization.WritingOptions.prettyPrinted) 

    let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue) 
    print(json!) 

    request.httpBody = json!.data(using: String.Encoding.utf8.rawValue) 

    Alamofire.request(request).responseJSON { response in 
     print(response.request ?? "no request") // original URL requ est 
     print(response.response ?? "no response") // HTTP URL response 
     print(response.data ?? "no data")  // server data 
     print(response.result) // result of response serialization 
     print(response.response?.statusCode ?? "noCode") 

     if(response.response?.statusCode != nil){ 
      switch response.response!.statusCode { 
      case 200: 
       print("Success") 
       let json = JSON(data: response.data!) 
       print(json) 
       sender.onSuccessCall() 
      case 400: 
       print("Error in authentication") 
      case 401: 
       print("Error authentication object was not found") 
      default: 
       print("dEfault") 
      } 
     } 
    } 
} 
1

请试试这个代码

  let urlString = String(format : "Your URL") 


      let params: [String : Any] = [ 
       "profile": [ 
        "Type": [ 
        " Real Estate", 
        "Estater", 
        "Construction", 
        "Entertainment" 
        ], 
        "Size": [ 
        "large", 
        "small" 
        ], 
        "Level": [ 
        "A", 
        "B" 
        ], 
        "Name" : [ 
        "John", 
        "Harry" 
        ] 
       ] 
      ] 

      print(params) 

      let url = URL(string: urlString)! 



    let data = try! JSONSerialization.data(withJSONObject: params, options: JSONSerialization.WritingOptions.prettyPrinted) 

    let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue) 
    if let json = json { 
     print(json) 
    } 

    let jsonData = json!.data(using: String.Encoding.utf8.rawValue); 



      var request = URLRequest(url: url) 
    request.httpMethod = HTTPMethod.post.rawValue 
    request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type") 
    request.setValue("bearer e2ff3aa3-63a3-41d1-bc5a3e8c88adeaaa",forHTTPHeaderField: "Authorization") 
      request.httpBody = jsonData 

      Alamofire.request(request).responseJSON { 
       (response) in 

       switch response.result { 
       case .success(let JSON): 
        print("Success with JSON: \(JSON)") 



        break 

       case .failure(let error): 
        print("Request failed with error: \(error)") 
        //callback(response.result.value as? NSMutableDictionary,error as NSError?) 
        break 
       } 


       } 
       .responseString { response in 

        print("Response String: \(response.result.value)") 

      }