【问题标题】:Send POST request with JSON object and query param to REST webservice using alamofire使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务
【发布时间】: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!
        }

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

提前致谢

【问题讨论】:

    标签: json swift post alamofire


    【解决方案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 时,我无法得到响应:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多