【问题标题】:AlamoFire Sending NilAlamoFire 发送零
【发布时间】:2018-11-20 06:53:30
【问题描述】:

我正在通过 Alamofire 发送 JSON 请求,但是该函数发送 nil。即使我已经验证所有项目都可以正常工作。

辅助功能:

 func requestServer(_ method: HTTPMethod,_ path: String,_ body: [String : Any]?,_ encoding: ParameterEncoding,_ headers: [String : Any]?,_ completionHandler: @escaping (JSON) -> Void){

        let url = baseURL?.appendingPathComponent(path)

        refreshTokenIfNeed {
            Alamofire.request(url!, method: method, parameters: body, encoding: encoding, headers: nil).responseJSON{ (response) in

                switch response.result {
                case .success(let value):
                    let jsonData = JSON(value)
                    completionHandler(jsonData)
                    break
                case .failure:
                    completionHandler(nil)
                    break
                }
            }
        }

    }

函数发送Nil:

  func pickOrder(orderId: Int, completionHandler: @escaping (JSON) -> Void) {
        let path = "api/driver/order/pick/"
        let header: [String: Any] = ["Authorization": "Bearer " + self.accessToken]

        let body: [String: Any] = [
            "order_id":"\(orderId)"
        ]
        print("header", header, "body", body)
        requestServer(.post, path, body, URLEncoding(), header, completionHandler)
    }

任何见解都会有所帮助!

【问题讨论】:

  • "Bearer" 我认为问题是你在 Bearer 之后放置了空间。删除空间而不是检查后
  • 不幸的是,这并没有做到。我试过了。我把它放在那里的原因是在 Postman 中它需要一个空格。

标签: ios swift api request alamofire


【解决方案1】:

在方法中传递JSONEncoding.default 以发送给定的JSON:

requestServer(.post, path, body, JSONEncoding.default, header, completionHandler)

并在您的标题部分传递标题值:

Alamofire.request(url!, method: method, parameters: body, encoding: encoding, headers: headers)

并且还要检查错误。在.failure 中打印print(response.error?.localizedDescription)

【讨论】:

  • 我收到“调用中的额外参数方法”错误。特别是在 Alamofire.request 部分的“方法”变量下。
  • 你用的是哪个alamofire版本?
【解决方案2】:

在您名为requestServer 的函数的这一行中,您发送的是headers nil,请同时传递标头。

Alamofire.request(url!, method: method, parameters: body, encoding: encoding, headers: nil).responseJSON{ (response) in

应该是这样的,

Alamofire.request(url!, method: method, parameters: body, encoding: encoding, headers: headers).responseJSON{ (response) in

试试看。

更新

下面的代码工作

    let params = ["test":"123"]
    Alamofire.request("url", method: .post, parameters: params, encoding: URLEncoding(), headers: nil).responseJSON { (test) in

    }

【讨论】:

  • 我会在通话中得到一个额外的参数。由于 requestServer 函数没有使用“url!”将其从 nil 更改会产生额外的参数。我该如何解决?
  • 不需要创建额外的参数,你已经在那个函数里了
  • 那行不通。我的一些函数是 .get 。并非所有函数都是 .post
  • 这只是建议,您也可以使用 get 代替 post
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2015-03-03
  • 2019-12-21
  • 2015-01-17
相关资源
最近更新 更多