Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift 5 & Alamofire 5 : GET method ERROR: Alamofire.AFError.URLRequestValidationFailureReason.bodyDataInGETRequest(22 bytes)

I am trying to get records from Database using Alamofire. I am sending parameters in GET request as below.

let headers : HTTPHeaders = ["x-access-token": "\(t)","username":"\(Base.sharedManager.user)","password":"\(Base.sharedManager.pass)"]
let parm : [String: Any] = ["search_str" : self!.searchStr]
// let searchUrl = Base.sharedManager.URL+"questions/get/"+self!.searchStr
let searchUrl = Base.sharedManager.URL+"questions/get/"

AF.request(searchUrl, method: .get, parameters: parm, encoding:JSONEncoding.default , headers: headers, interceptor: nil).response { (responseData) in
    guard let data = responseData.data else {
        debugPrint("Error getting question data", responseData.error as Any)
        self?.showNoResults()
        return
    }

    do {
        let sResults = try JSONDecoder().decode(SearchResults.self, from: data)
        self!.searchReturn = [sResults]
        self!.qSearchTV.reloadData()
    } catch {
        self?.showNoResults()
        print("Error retriving questions \(error)")
    }                        
}

Got the error below when above code executed: "Error getting question data" Optional(Alamofire.AFError.urlRequestValidationFailed(reason: Alamofire.AFError.URLRequestValidationFailureReason.bodyDataInGETRequest(23 bytes)))

like image 602
Votesapp Team Avatar asked Mar 31 '20 22:03

Votesapp Team


2 Answers

Use URLEncoding.default instead of JSONEncoding.default

AF.request(path, 
          method: .get, 
      parameters: params, 
        encoding: URLEncoding.default, 
         headers: nil)
  .response { (responseData) in

}
like image 192
Vladislav Avatar answered Oct 10 '22 10:10

Vladislav


Alamofire 5 and Apple's 2019 frameworks now produce an error when you try to make a GET request with body data, as such a request is invalid. I would suggest checking to make sure that's what your server is expecting, and if it does really require body data for GET requests, reach out to the API provider and request a change, as no device running Apple's 2019 OSes will be able to make such a request.

like image 32
Jon Shier Avatar answered Oct 10 '22 11:10

Jon Shier