2016-08-03 106 views
0

我试图让Alamofire这个URL编码如下使用url编码我如何获得Alamofire编码以下链接 - 它持续下降参数

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编码它完全丢弃“查询”参数中的URL,并给了我这样的:

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

  • 我曾尝试参数改变为这样:

    让端点= “https://domain.com/rest/api/2/search/” 让PARAMS: [String:AnyObject] = [“query”:“assign = user123()by lastUp desc”]

  • howeve r它将“=”标记编码为%20%3D%20

    有没有人有建议,我如何才能使它工作?

    +0

    最终的'GET' URL应该是什么样的? –

    +0

    它在第一个问题 –

    回答

    0

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

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

    如果我们可以指定参数的顺序,会更好。

    1

    我只是排名快速测试你的URL,这是我的输出网址:

    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

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

    +0

    的问题顶部列出有没有办法阻止它按照它们添加的顺序排序和传递参数?它破坏了代码 –

    +0

    现在唯一的方法是修改源代码。将'parameter.keys.sort(<){...}'中的键更改为''ParameterEncoding.swift'中的参数key.information {...}。 为此,您将不得不手动添加类到您的项目。 或者,你可以fork Alamofire回购,修改'ParameterEncoding'类并添加_your own_git回购到你的podfile。 –

    +0

    谢谢@Vinod - 它看起来就像放入网址一样简单,但这是一个很好的方法。我可能会提供拉请求。 –

    0

    您是否期望任何URL编码器在查询字符串中不编码=到%3D?

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

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

    assignment=user123() order by lastUp desc 
    

    这是输出我得到:

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

    简单地说, “=”不是URL安全的,并且如果在查询字符串中的参数值中提供它将被编码

    +0

    你确定吗?我认为可能是安全的,因为iit用于将参数关键字与url中的值相关联,例如domain.com/search?db=main –