2016-02-21 70 views
0

我创建了一个生成URL请求的路由器。为URL请求编码参数

enum Router: URLRequestConvertible { 
    static let baseURLString = "SERVERIP" 

    case GetAEDInRange(String) 
    // match URLRequest routes to Alamofire methods 
    var URLRequest: NSMutableURLRequest { 
     var method: Alamofire.Method { 
      switch self { 

      case .GetAEDInRange: 
       return .GET 
      } 
     } 

     // The output contains the path and parameters like ("aeds", newAED) 
     let result: (path: String, parameters: [String: AnyObject]?) = { 
      switch self { 

      case .GetAEDInRange(let parameters): 
       return ("aeds", parameters) 
     }() 

     // Generate URL Request 
     let URL = NSURL(string: Router.baseURLString)! 

     // Append the path components from the result 
     print(result.path) 
     let URLRequest = NSURLRequest(URL: URL.URLByAppendingPathComponent(result.path)) 

     // Create URLRequest inclunding the encoded parameters 
     let encoding = Alamofire.ParameterEncoding.JSON 
     let (encodedRequest, _) = encoding.encode(URLRequest, parameters: result.parameters) 
     encodedRequest.HTTPMethod = method.rawValue 
     return encodedRequest 
    } 
} 

我期望的输出是:http://BASEURL/v1/aed?latitude=100&longitude=100

当我使用Alamofire使附带参数的GET请求,它工作正常:

Alamofire.request(.GET, "http://SERVER/v1/aeds", parameters: parameters).responseJSON { (response) -> Void in 
     print(response.result.value) 
    } 

当我使用我的路由器相反,输出不按预期生成:

Alamofire.request(Router.GetAEDInRange(parameters)).responseJSON { (response) -> Void in 
     print(response.result.value) 
    } 

当我打印URL字符串,我得到:`http://SERVER/v1/aeds/`` 如何更改我的路由器?我以某种方式与参数组件斗争。

回答

2

改变这一行

let encoding = Alamofire.ParameterEncoding.JSON 

这样:

let encoding = Alamofire.ParameterEncoding.URLEncodedInURL 

要了解Alamofire参数编码之间的差异来看看here

1

Swift3 'Alamofire', '〜> 4.0'

let parameters: [String: Any] = [ 
      "parameter1" : data1, 
      "parameter2" : data2 
     ] 

Alamofire.request("https://httpbin.org/get", parameters: parameters, encoding: URLEncoding(destination: .queryString))