如何使用Alamofire将来自SwiftyJSON对象的JSON正文添加到包含不同参数的POST请求中?
我在SO中阅读了答案,并查看了官方的Alamofire文档,但大多数答案都增加了对JSON数据是添加到URL参数还是添加到正文的混淆 HTTP请求必须包含一个参数键,该参数键等于访问API的API键和包含图像数据和一些与API相关的数据的JSON键 带有请求参数的URL如下所示: JSON结构位于 我的Swift代码如下所示如何使用Alamofire将来自SwiftyJSON对象的JSON正文添加到包含不同参数的POST请求中?,json,swift,http,alamofire,google-cloud-vision,Json,Swift,Http,Alamofire,Google Cloud Vision,我在SO中阅读了答案,并查看了官方的Alamofire文档,但大多数答案都增加了对JSON数据是添加到URL参数还是添加到正文的混淆 HTTP请求必须包含一个参数键,该参数键等于访问API的API键和包含图像数据和一些与API相关的数据的JSON键 带有请求参数的URL如下所示: JSON结构位于 我的Swift代码如下所示 import SwiftyJSON import Alamofire // all imports are done func requestAPI(body:J
import SwiftyJSON
import Alamofire
// all imports are done
func requestAPI(body:JSON) -> JSON {
let APIKey:String = "My_API_KEY"
let header = ["Content-Type":"application/json"]
let url:String = "https://vision.googleapis.com/v1/images:annotate"
let parameters = ["key":APIKey]
var response = Alamofire.request(.POST,url,headers:header,parameters:parameters)
response.validate().responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
print("JSON: \(json)")
print(response.request)
}
case .Failure(let error):
print(error)
}
}
return body //dummy return
}
我确实查阅了阿拉莫菲尔的文件。
从
带有URL编码参数的POST请求
文件的第一节
let parameters = [
"foo": "bar",
"baz": ["a", 1],
"qux": [
"x": 1,
"y": 2,
"z": 3
]
]
Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
我的理解是,作为parameters参数传递的JSON作为参数添加到HTTp POST请求的URL中(类似于请求的key:My_API_key部分)。并使用.JSON作为编码选项,将parameters参数添加为请求的JSON主体。我如何做到这两个方面(一个是URL编码的参数键,另一个是添加到HTTP正文中的JSON数据)?Alamofire的请求方法似乎正在使用相同的参数执行2个操作中的任何一个
我尝试创建一个NSURLMutableRequest并添加主体。但是在访问SwiftyJSON对象的rawValue时,我得到了以下错误。
错误:调用可以抛出,但未标记为“try”,并且未处理错误
如果让bodyData:NSData=body.rawData(){
这是代码
func requestAPI(body:JSON) -> JSON {
let APIKey:String = "My_API_Key"
let header = ["Content-Type":"application/json"]
let url = NSURL(string:"https://vision.googleapis.com/v1/images:annotate")
let parameters = ["key":APIKey]
var request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST"
if let bodyData:NSData = body.rawData(){
request.HTTPBody = bodyData
}
let encoding = Alamofire.ParameterEncoding.URL
(request, _) = encoding.encode(request, parameters: parameters) // Parameters are added here
var response = Alamofire.request(.POST,url!,headers:header,parameters:parameters)
response.validate().responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
print("JSON: \(json)")
//return json
print(response.request)
}
case .Failure(let error):
print(error)
}
}
return body //dummy return
}
我在哪里以及如何将请求的HTTP正文设置为JsonData,并用参数对URL进行编码?我想这包括在
Alamofire
文档中。谢谢你的评论Kye。我更新了我的问题,以补充我对Alamofire文档的理解,并尝试更具体一些。