如何让Alamofire对此Url进行编码 - 它会不断删除参数

时间:2016-08-03 00:20:25

标签: swift macos alamofire

我正在尝试让Alamofire使用URLEncoded

对此网址进行编码,如下所示
  

https://domain.com/rest/api/2/search?query=assignment=user123()%20order%20by%20lastUp%20desc

我使用了以下代码:

let endpoint = "https://domain.com/rest/api/2/search/"
 let params:[String:AnyObject] = ["query" : "","assignment" : "user123() order by lastUpdated desc"] 

但是当Alamofire对网址进行编码时,它会删除"查询"参数完全给我这个:

  

https://domain.com/rest/api/2/search?assignment=user123()%20order%20by%20lastUp%20desc //缺少查询参数

  1. 我尝试将参数更改为:

    让endpoint =" https://domain.com/rest/api/2/search/"          让params:[String:AnyObject] = [" query" :"赋值= user123()按lastUp desc排序"]

  2. 然而,它编码" ="签为%20%3D%20

    有没有人有建议,我怎么能让它发挥作用?

3 个答案:

答案 0 :(得分:1)

我只是对您的网址进行快速测试,这是我的输出网址:

https://domain.com/rest/api/2/search/?assignment=user123%28%29%20order%20by%20lastUpdated%20desc&query=

你可以看到,query param没有被跳过,它只是放在最后。 Alamofire类ParameterEncoding.swift在构造URL时按字母顺序对键进行排序。

这是我的参考代码:

    let endpoint = "https://domain.com/rest/api/2/search/"
    let params:[String:AnyObject] = ["query" : "","assignment" : "user123() order by lastUpdated desc"]

    Alamofire.request(.GET, endpoint, parameters: params)
        .responseData { response in


            if let str = response.request?.URLString {

                print("~~~URL~~~\n", str)

            } else {

                print("oops")
            }
    }

但是,这里的要点是,如果您打算传递一个键(query)和一个值(assignment=user123...),那么=是正确的,可以编码为%20%3D%20

您的服务器应将其解码回=并根据需要使用它。

答案 1 :(得分:0)

您是否希望任何网址编码器不对查询字符串中的= to%3D进行编码?

试试这个:http://meyerweb.com/eric/tools/dencoder/

当我在上面的编码器/解码器中输入它时:

assignment=user123() order by lastUp desc

这是我得到的输出:

assignment%3Duser123()%20order%20by%20lastUp%20desc

简单地说," ="不是URL安全的,如果在查询字符串

中的参数值中提供,它将被编码

答案 2 :(得分:0)

看起来让它工作的唯一方法就是根本不使用参数并按原样放置完整的端点。

let endpointFull = https://domain.com/rest/api/2/search?query=assignment=user123()%20order%20by%20lastUp%20desc  

 Alamofire.request(.GET, endpointFull)
如果我们可以指定参数的顺序,那会好得多。