Кодировать параметры для запроса 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/`` Как нужно ли менять роутер? Я как-то борюсь с компонентом параметра.


person sesc360    schedule 21.02.2016    source источник


Ответы (2)


Изменить эту строку

let encoding = Alamofire.ParameterEncoding.JSON

к этому:

let encoding = Alamofire.ParameterEncoding.URLEncodedInURL

Чтобы понять разницу между кодировками параметров в Alamofire, посмотрите здесь.

person fdiaz    schedule 21.02.2016

Swift3 'Alamofire', '~> 4.0'

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

Alamofire.request("https://httpbin.org/get", parameters: parameters, encoding: URLEncoding(destination: .queryString))
person Victor Santos    schedule 27.04.2017