用于 PUT 方法的 Alamofire Content-Type application/json

Posted

技术标签:

【中文标题】用于 PUT 方法的 Alamofire Content-Type application/json【英文标题】:Alamofire Content-Type application/json for PUT method 【发布时间】:2016-07-25 11:04:23 【问题描述】:

我现在正在寻找在 Alamofire Content-Type application/json 中为 PUT 方法添加 content-type: application/json 的解决方案。我已经开发如下,但无法正常工作。

        Alamofire.request(.PUT, Config.preferenceURL, parameters: param, headers: headers)
            .validate(contentType: ["application/json"])
            .responseJSON  response in
                let swiftyJsonVar = JSON(response.result.value!)
                print(swiftyJsonVar)
                if (swiftyJsonVar["success"]) 

                

                JHProgressHUD.sharedHUD.hide()
        

【问题讨论】:

显示/添加你得到的错误日志。 【参考方案1】:

您需要在request 方法中指定encoding: .JSON。否则,它会将您的参数编码为 URL 中的查询参数。通过使用.JSON 编码,将自动为您设置Content-Type 标头。

Alamofire.request(.PUT, Config.preferenceURL, parameters: param, encoding: .JSON, headers: headers)

您还可以使用debugPrint API 打印出与您发送到服务器的请求等效的cURL 命令。

let request = Alamofire.request(.PUT, Config.preferenceURL, parameters: param, encoding: .JSON, headers: headers)
debugPrint(request)

干杯。 ?

【讨论】:

"Content-Type 标头将自动为您设置。" 这在 4.0 上是否更改?即使我使用JSONEncoding.default,我也必须手动添加它【参考方案2】:

添加content-type: application/json 如下所示:-

let URL = NSURL(string: "https://httpbin.org/post")!
let mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = "POST"

let parameters = ["foo": "bar"]

do 
    mutableURLRequest.HTTPBody = try NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions())
 catch 
    // No-op


mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")

Alamofire.request(mutableURLRequest)

More detail here

【讨论】:

以上是关于用于 PUT 方法的 Alamofire Content-Type application/json的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 alamofire 实现 put http 请求

如何在 Alamofire 中使用 PUT 请求

如何在 Alamofire 中使用相同的 API 函数 .PUT 请求更新 JSON

通话中的 Alamofire 额外参数“方法”

使用 Alamofire 为参数发送“Null”值

PUT NSData 从 S3 到 PreSigned URL,Alamofire.upload(...) 在 iOS 8 上不起作用