Swift 如何在NSURLSession中使用PUT方法向HTTPBody添加数据?

Swift 如何在NSURLSession中使用PUT方法向HTTPBody添加数据?,swift,nsurlsession,Swift,Nsurlsession,这是我的密码。它与POST一起工作,但与PUT无关 let url:NSURL = NSURL(string: urlApi)! let session = NSURLSession.sharedSession() let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "PUT" request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData r

这是我的密码。它与POST一起工作,但与PUT无关

let url:NSURL = NSURL(string: urlApi)!
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "PUT"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
request.addValue("a5f96d8c01000194c639d6b5f3b199eb", forHTTPHeaderField: "token")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let params:[String: AnyObject] = ["id" : 296,"name" : "asdad","space_width":10,"space_height":10,"space_altitude":10,"actions":""]
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions())

let task = session.dataTaskWithRequest(request) {
    (
    let data, let response, let error) in

    guard let _:NSData = data, let _:NSURLResponse = response  where error == nil else {
        print("error")
        return
    }

    let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
    print(dataString)
}
task.resume()

是的,我同意dgatwood的观点,我认为你缺少的主要内容是内容类型标题

我只是想弄明白这一点,似乎PUT和PATCH对它们的内容类型很挑剔。在您的情况下,看起来您正在使用JSON,因此您可能会有如下代码:

request.addValue("application/json", forHTTPHeaderField: "Content-Type")

对于“Accept”标题,您可以使用它,但它可以控制不同的内容。试一试。

是的,我同意dgatwood的观点,我认为您缺少的主要内容是内容类型标题

我只是想弄明白这一点,似乎PUT和PATCH对它们的内容类型很挑剔。在您的情况下,看起来您正在使用JSON,因此您可能会有如下代码:

request.addValue("application/json", forHTTPHeaderField: "Content-Type")

对于“Accept”标题,您可以使用它,但它可以控制不同的内容。试一试。

你看到了什么错误或行为?“不工作”并没有给我们带来太多的问题。你可以尝试添加一个内容类型标题,但其他。。。我猜区别在于服务器端。您能显示服务器端的代码吗?您看到了什么错误或行为?“不工作”并没有给我们带来太多的问题。你可以尝试添加一个内容类型标题,但其他。。。我猜区别在于服务器端。你能显示服务器端的代码吗?