【问题标题】:Postman Body Raw Request To Swift Alamofire邮递员对 Swift Alamofire 的原始请求
【发布时间】:2018-02-10 14:39:38
【问题描述】:

我正在尝试重新创建此 Postman 设置以在 Alamofire 中发布。这是我第一次看到需要参数和带有 Raw Json 的主体的 API。

我已经完成了针对上述要求的数据收集和格式化(在 Json 中使用 SwiftyJSON 或 Dictionary [String : Any] / Parameters)。

虽然我确实看到了与此类似的问题:Postman request to Alamofire request,但它没有有效的答案。假设我对从各种 API 发布/获取/等数据非常有经验,但我只是不知道如何传递原始数据,就像上面的照片一样。请在代码中查看我的 cmets。

这是我为这个请求使用我的函数所做的:

/** Apply to job with Shift.
 *  This service function creates a json data for applying.
 */

func someFuncService(_ job: Job, daySchedules: [(Int, String, Schedule)], withBlock completion: @escaping JobServiceCommonCallBack) {
    AuthService.someFunc { (currentCustomer, accessToken) in
        guard let lalala = currentCustomer?.id,
            let accessT = accessToken else {
                completion(LalaErrors.currentCustomerError)
                return
        }

        guard let jobId = job.id else {
            completion(LalaErrors.modelError)
            return
        }


        let coreService = LalaCoreService()

        let applicantEndpoint = LalaCoreService.Endpoint.Applicant

        let parameters = [
            "param1" : customerId,
            "param2" : jobId,
            "accessToken" : accessToken,
            "shift" : self.generateDataFromDaySchedules(daySchedules) // this returns [String : Any], can be printed into Json using JSON(x)
            ] as Parameters

        GPLog(classSender: self, log: "FINAL PARAMETER: \(parameters)")

        coreService.request = Alamofire.request(
            applicantEndpoint,
            method: .post,
            parameters: parameters,
            encoding: URLEncoding.default, // I already have tried .httpbody too.
            headers: nil
        )

        coreService.request {
            (response, result) in

            if let error = result?.error {
                if response!.statusCode == 500 {
                    completion(GPKitError.newError(description: "Failed to apply. Please contact the admin."))
                    return
                }

                completion(error)
                return
            }

            // Success
            completion(nil)
            return
        }
    }
}

编辑:所以问题是,我在这里做错了什么? API 返回状态码 500 内部服务器错误。

【问题讨论】:

  • 您在 Postman 中设置的单个标头是什么?您在 Alamofire 请求中将标头设置为 nil
  • 我的邮递员中的标题是 Content-Type application/x-www-form-urlencoded 这没关系。尝试在 Postman 中删除它并且请求有效。我所有的请求都不需要标头。
  • 如果使用该标头可以解决问题,我仍然会在 Alamofire 中尝试一下。将encoding 设置为URLEncoding.httpBody 并使用指定的标头。顺便说一句,Parameters 只是 [String:Any] 的类型别名?
  • 现在完成了,大卫。感谢您的时间。查看所选答案。支持您的评论。

标签: ios swift alamofire


【解决方案1】:
  coreService.request = Alamofire.request(
        applicantEndpoint,
        method: .post,
        parameters: parameters,
        encoding: URLEncoding.default, // I already have tried .httpbody too.
        headers: nil
    )

应该是

  coreService.request = Alamofire.request(
            applicantEndpoint + accessToken,
            method: .post,
            parameters: parameters,
            encoding: JSONEncoding.default, 
            headers: nil
        )

【讨论】:

  • 愚蠢的我,我一直在我的所有请求中使用那个 JSONEncoding.default 并且我什至没有尝试在这个特定的请求中使用它,因为我认为这甚至行不通。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2020-05-22
  • 1970-01-01
  • 2020-09-17
  • 2017-11-16
  • 2017-12-30
相关资源
最近更新 更多