在swift中发送PUT请求中的正文

时间:2015-09-17 05:29:07

标签: ios swift

我尝试在PUT请求中发送正文但在后端没有收到数据

let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "PUT"
let putBody = "bucket=\(bucket)&day=\(day)"
request.HTTPBody = putBody.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {(data, response, error) -> Void in
       dispatch_async(dispatch_get_main_queue(), {() -> Void in
            completion(data: data, response: response as! NSHTTPURLResponse, error: error)
       }) 
   })
 task.resume()

bucket (Int)的值为2015040day (String)的值为day27。我尝试在Postman中发出相同的请求,服务器收到了正文数据,因此服务器没有任何问题。

有没有其他方法来设置请求的正文?

编辑:

如果我在请求和服务器中将请求方法更改为POST,它的工作正常。所以问题归结为如何在PUT请求中设置主体?

1 个答案:

答案 0 :(得分:1)

我刚刚处理过这件事。有完全相同的问题,它与POST工作完全正常,但不与PUT或PATCH请求。看来,对于PUT和PATCH请求,Swift对于Content-Type标头很挑剔。

所以尝试添加:

request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

只要您的身体是网址样式,这将有效,所以像这样:

key=value&key=value&key=value

对于那些使用JSON的人,只需使用application / json代替Content-Type。