我有一个问题,我尝试使用Alamofire的PATCH方法进行更新,但未反映任何更改。

我认为我犯了一个错误。

这是我的代码:

    Alamofire.request(.PATCH, url, parameters: ["op": "replace", "path": "/IsVacinated", "value": true], encoding: .JSON)
        .responseJSON { response in
            Utils.endRequest(progressView)
            if let data = response.data {
                let json = JSON(data: data)
                if json != nil {
                    self.navigationController?.popViewControllerAnimated(true)
                    print(json)
                }
                else {
                    print("nil json")
                }
            }
            else {
                print("nil data")
            }
    }

希望您能对我有所帮助,并且我搜索的信息不多。

最好的祝福。

最佳答案

您需要使用自定义编码,并将参数作为原始字符串发送到正文中

let enconding: ParameterEncoding = .Custom({convertible, params in
                let mutableRequest = convertible.URLRequest.copy() as? NSMutableURLRequest
                mutableRequest?.HTTPBody = "[{\"op\" : \"replace\", \"path\" : \"/IsVacinated\", \"value\":true"}]".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
                if let mutableRequest = mutableRequest {
                    return (mutableRequest, nil)
                }
                let error = NSError(domain: "Custom", code: -1, userInfo: nil)
                return (convertible.URLRequest, error)
            })

最后使用自定义编码
Alamofire.request(.PATCH, url, parameters: [:], encoding: encoding)
        .responseJSON { response in
            Utils.endRequest(progressView)
            if let data = response.data {
                let json = JSON(data: data)
                if json != nil {
                    self.navigationController?.popViewControllerAnimated(true)
                    print(json)
                }
                else {
                    print("nil json")
                }
            }
            else {
                print("nil data")
            }
    }

07-28 09:47