2016-02-21 3 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 String, я получаю: `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)) 
Смежные вопросы