Swift 5 & Alamofire 5:GET 方法错误:Alamofire.AFError.URLRequestValidationFailureReason.bodyDataInGETRequest(22 bytes)

Vot*_*eam 7 ios swift alamofire

我正在尝试使用 Alamofire 从数据库中获取记录。我在 GET 请求中发送参数如下。

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)")
    }                        
}
Run Code Online (Sandbox Code Playgroud)

执行上述代码时出现以下错误:“获取问题数据时出错” Optional(Alamofire.AFError.urlRequestValidationFailed(reason: Alamofire.AFError.URLRequestValidationFailureReason.bodyDataInGETRequest(23 bytes)))

Vla*_*lav 11

Use URLEncoding.default instead of JSONEncoding.default

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

}
Run Code Online (Sandbox Code Playgroud)


gts*_*gts 9

您必须删除“参数”参数。

而不是这样做:

AF.request("https://httpbin.org/get",
              method: .get,
              parameters: [:],
              encoding: URLEncoding.httpBody,
              headers: [:])
Run Code Online (Sandbox Code Playgroud)

做这个:

AF.request("https://httpbin.org/get",
              method: .get,
              encoding: URLEncoding.httpBody,
              headers: [:])
Run Code Online (Sandbox Code Playgroud)

  • @HamedNova,我猜问题是因为 GET 方法没有主体参数。 (2认同)

Jon*_*ier 8

现在,当您尝试使用正文数据发出请求时,Alamofire 5 和 Apple 的 2019 框架会产生错误GET,因为此类请求无效。我建议检查以确保这是您的服务器所期望的,如果它确实需要GET请求的正文数据,请联系 API 提供商并请求更改,因为运行 Apple 2019 操作系统的设备无法做出这样的操作要求。