如何使用Alamofire 4在Swift 3中为JSON数据同时发送参数和正文的POST请求?

邮差api url加在下面。 在这里输入图像说明

现在的代码:

let baseUrl = "abc.com/search/" let param = [ "page":"1", "size":"5", "sortBy":"profile_locality" ] let headers = [ "Content-Type": "application/json" ] Alamofire.SessionManager.default.request("\(baseUrl)field", method: .post,parameters: param, encoding: JSONEncoding.default, headers: headers).responseJSON { response in print(response.request ?? "no request") // original URL request if(response.response?.statusCode != nil){ print("done") if self.checkResponse(response.response!.statusCode){ let json = JSON(data: response.data!) //print("at_LeadStop json \(json)") return completionHandler(json, false) } else { return completionHandler(JSON.null, true) } } else { print("gone") return completionHandler(JSON.null, true) }} 

我不知道如何通过这个代码添加正文请求。 请帮我解决这个问题。

你在这里混合两件事情, pagesizesortBy是你需要传递的urlstring作为查询string。 现在你的身体请求是JSON数组,你可以只使用URLRequest发布数组与Alamofire 。 所以试试这个。

 let baseUrl = "abc.com/search/" let queryStringParam = [ "page":"1", "size":"5", "sortBy":"profile_locality" ] //Make first url from this queryStringParam using URLComponents var urlComponent = URLComponents(string: baseUrl)! let queryItems = queryStringParam.map { URLQueryItem(name: $0.key, value: $0.value) } urlComponent.queryItems = queryItems //Now make `URLRequest` and set body and headers with it let param = [ [ "fieldName" : "abc", "fieldValue":"xyz" ], [ "fieldName" : "123", "fieldValue":"789" ] ] let headers = [ "Content-Type": "application/json" ] var request = URLRequest(url: urlComponent.url!) request.httpMethod = "POST" request.httpBody = try? JSONSerialization.data(withJSONObject: param) request.allHTTPHeaderFields = headers //Now use this URLRequest with Alamofire to make request Alamofire.request(request).responseJSON { response in //Your code } 

试试这个:使用自定义编码

  struct JSONStringArrayEncoding: ParameterEncoding { private let array: [[String : Any]] init(array: [[String : Any]]) { self.array = array } func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { var urlRequest = try urlRequest.asURLRequest() let data = try JSONSerialization.data(withJSONObject: array, options: []) if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") } urlRequest.httpBody = data return urlRequest } } 

调用

 let values = [ [ "fieldName" : "abc", "fieldValue":"xyz" ], [ "fieldName" : "123", "fieldValue":"789" ] ] let param = [ "page":"1", "size":"5", "sortBy":"profile_locality" ] let parameterEncoding = JSONStringArrayEncoding.init(array: values) Alamofire.request("url", method: .post, parameters: param, encoding:parameterEncoding ).validate().response { (responseObject) in // do your work }