我尝试在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)
的值为2015040
,day (String)
的值为day27
。我尝试在Postman中发出相同的请求,服务器收到了正文数据,因此服务器没有任何问题。
有没有其他方法来设置请求的正文?
编辑:
如果我在请求和服务器中将请求方法更改为POST,它的工作正常。所以问题归结为如何在PUT请求中设置主体?
答案 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。