2017-07-17 37 views
0

我需要向服务器发送请求并获得响应。IOS。屏蔽网址中的符号

我有以下网址:

http://192.168.200.10:9044/api/tables/?filter= { “open_visible”:真实的, “相关”:假}

对于我使用Alamofire查询。这里有一些方法我如何做到这一点:

1)

class func getTables(completion: @escaping (_ response : DataResponse<TablesResponse>) -> Void) { 
    SVProgressHUD.show() 
    let getTablesPath = apiEntryPoint + "tables/?filter={\"open_visible\":true,\"related\":false}" 

    Alamofire.request(getTablesPath) 
     .validate() 
     .responseObject { (response: DataResponse<TablesResponse>) in 
      SVProgressHUD.dismiss() 
      completion(response) 
    } 
} 

我得到的错误:screenshot

2)

class func getTables(completion: @escaping (_ response : DataResponse<TablesResponse>) -> Void) { 
    SVProgressHUD.show() 
    let getTablesPath = apiEntryPoint + "tables/?filter={%22open_visible%22:true,%22related%22:false}" 

    Alamofire.request(getTablesPath) 
     .validate() 
     .responseObject { (response: DataResponse<TablesResponse>) in 
      SVProgressHUD.dismiss() 
      completion(response) 
    } 
} 

我得到的错误。

3)

class func getTables(completion: @escaping (_ response : DataResponse<TablesResponse>) -> Void) { 
    SVProgressHUD.show() 
    var getTablesPath = apiEntryPoint + "tables/?filter=" 

    let jsonParameters = ["open_visible":true, "related":false] 
    if let json = try? JSONSerialization.data(withJSONObject: jsonParameters, options: []) { 
     if let content = String(data: json, encoding: .utf8) { 
      getTablesPath += content 
     } 
    } 

    Alamofire.request(getTablesPath) 
     .validate() 
     .responseObject { (response: DataResponse<TablesResponse>) in 
      SVProgressHUD.dismiss() 
      completion(response) 
    } 
} 

我得到的错误。

4)

class func getTables(completion: @escaping (_ response : DataResponse<TablesResponse>) -> Void) { 
    SVProgressHUD.show() 
    let getTablesPath = apiEntryPoint + "tables/" 

    Alamofire.request(getTablesPath, parameters: ["open_visible":true, "related":false]) 
     .validate() 
     .responseObject { (response: DataResponse<TablesResponse>) in 
      SVProgressHUD.dismiss() 
      completion(response) 
    } 
} 

我得到了所有表。不考虑所需的参数。这不好。

问题

正如我可以发送请求的服务器,考虑到必要的参数。

+0

点[2](https://i.stack.imgur.com/II7AH.png)和[3](https://i.stack.imgur.com/uAEUh.png)的错误截图。 – Belzik

+0

'{'和'}'不是可以在URL中传递的字符。你需要检查你的API的文档是否符合'filter'的参数 –

回答

1

尝试

let urlParameters = yourParametersString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 

,因为你不能仅仅通过{}字符的URL

0

您可以使用请求参数更加人性化。 将所有请求数据放入NSDictionary并将其发送到服务器。

let parameters: NSDictionary = [ 
    "YOUR_KEY": YOUR_VALUE, 
] 

// Both calls are equivalent 
Alamofire.request(YOUR_SERVER_ULR, method: .post, parameters: parameters, encoding: JSONEncoding.default) 
Alamofire.request(YOUR_SERVER_ULR, method: .post, parameters: parameters, encoding: JSONEncoding(options: [])) 

另一种方式是,如果你是通过一些特殊的字符到你的问题的参数,那么你已编码的URL。

let URL = YOUR_FINAL_URL_TO_SERVER.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 

有关更多详细信息,请参阅Apple Document