使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务

Posted

技术标签:

【中文标题】使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务【英文标题】:Send POST request with JSON object and query param to REST webservice using alamofire 【发布时间】:2016-03-21 00:25:07 【问题描述】:

我正在尝试使用 alamofire 向 REST 网络服务发送 POST 请求

我将 json 对象作为 POST 正文传递,我得到了响应,到目前为止一切正常

Alamofire.request(.POST, path, parameters: createQueryParams(), encoding: .JSON)
            .responseArray  (request, response, myWrapper, error) in
                if let anError = error
                
                    completionHandler(nil, error)
                    println("Error in handling request or response!")
                    return
                
                completionHandler(myWrapper, nil)
        

private class func createQueryParams() -> [String:AnyObject]
        var parameters:[String:AnyObject] = [String:AnyObject]()
        parameters["lat"] = lLat!
        parameters["lng"] = lLon!

        if category != nil  // here is the problem
            parameters["category"] = category!
        

        return parameters
    

我有一个类别过滤器,如果类别变量中有一个值,我想将其作为 QueryParam 发送(编码应该是 .URL 吗?但我如何发送 json 对象??)

此代码不起作用

if category != nil 
            parameters["category"] = category!
        

我该怎么做?希望我能解释清楚

提前致谢

【问题讨论】:

【参考方案1】:

你可以这样解决:

let mutableUrlRequest = NSMutableUrlRequest(URL: URL.URLByAppendingPathComponent(path)
mutableUrlRequest.HTTPMethod = .POST
let request = Alamofire.ParameterEncoding.URL.encode(mutableUrlRequest, parameters: createQueryParameters()).0

Alamofire.request(request)

但是,我建议您查看 Alamofire 的路由器声明并尝试这个。有了它,您可以创建动态请求,并且所有请求都在一个文件中声明。

编辑: 哦,等一下,您可能会忘记之前的编辑,解决方案非常简单,您也自己回答了。是的,您只需将编码更改为 .URL,您仍然可以发送 json 对象,因为 Alamofire 本身会将 json 对象解码为查询参数的字符串。

Alamofire.request(.POST, path, parameters:createQueryParams(), encoding: .URL).responseArray...

编辑 2: 由于第一次编辑不起作用,请尝试以下操作:

let url = NSURL(string: path)!
let urlRequest = NSURLReqeust(URL: url)
request.HTTPMethod = "Post"
let encoding = Alamofire.ParameterEncoding.URL
let request = encoding.encode(urlRequest, createQueryParams())
Alamofire.request(request)

【讨论】:

感谢您的回答,不幸的是,这不受支持:( 您使用的是哪个 Alamofire 版本? alamofire 版本 1.2.2 非常感谢,但我应该在哪里添加这些行? 但是当我将编码更改为 .URL 时,我无法得到响应:(

以上是关于使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数

带有 Alamofire post 参数的 SwiftyJSON 对象

带有 JSON 参数的多部分数据 Alamofire

使用 Alamofire 将 JSON 解码为对象

如何在 Swift 中使用 Alamofire 上传带有 JSON 参数的图像?

使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求