2016-08-10 5 views
0

Итак, я пытаюсь сделать .POST запрос с Alamofire с опцией по умолчанию:Alamofire .POST кодирование (.url)

Alamofire.request(.POST, url, parameters: parameters).validate().responseJSON 

Это один работает просто отлично. Как отмечается в документации, по умолчанию для параметров задано значение .URL.

Теперь я пытаюсь улучшить мой код создания маршрутизаторов после этого руководства: https://grokswift.com/router/

В конце реализации необходимо, чтобы закодировать параметры вручную. Так, если по умолчанию работает, я использую .URL кодировку теперь здесь, вот так:

let encoding = Alamofire.ParameterEncoding.URL 
    let (encodedRequest, _) = encoding.encode(urlRequest, parameters: parameters) 

Теперь запрос не будет работать, так как параметры, по-видимому, отправляются в неправильном формате.

Я уверен, что API функциональный, я тестирую его в Postman, и параметры отправляются с опцией form-data.

Заранее благодарим всех, кто может мне помочь!

+0

Возможно, вы можете попробовать использовать «multipartFormData» alamofire – Tj3n

+0

@ Tj3n Я думал об этом. Но как он может работать без 'multipartFormData' в запросе по умолчанию, но не в маршрутизаторе, если метод кодирования одинаковый? – Victor

+0

Я не уверен в этом: D может быть, вы можете попробовать распечатать HTTPBody запроса и декодировать его обратно, чтобы увидеть значение? – Tj3n

ответ

1

Если она работает и раньше, дважды проверьте, что он использует кодировку URL:

let postRequest = Alamofire.request(.POST, url, parameters: parameters) 
    .validate() 
    .responseJSON { ... } 
debugPrint(postRequest) 

Это должно показать вам эквивалентное заявление Curl для вашего запроса.

Затем измените маршрутизатор на использование кодировки .URL и посмотрите, будут ли изменения debugPrint.

+0

Эй! Я просто попробовал это, и по сути это кодировка .URL. Когда я использую «Аламофир».запросить реализацию по умолчанию », например:« Alamofire.request (.POST, baseApiAddress, параметры: параметры, кодировка: .URL) .validate(). responseJSON' или 'Alamofire.request (.POST, baseApiAddress +"/users ", параметры : parameters) .validate(). responseJSON', запрос работает одинаково, так что это действительно .URL-кодирование. Но когда я пытаюсь сделать маршрутизатор, как я уже сказал, кодировка .URL не работает. – Victor

+0

О, и отладочная печать такая же! – Victor

+0

проделал некоторое копирование, а с помощью 'debugPrint' я вижу, что заголовки одинаковы между по умолчанию' Alamofire.request' и при использовании маршрутизаторов, описанных в вопросе, 'cURL' в маршрутизаторе отсутствует' -d 'и параметры находятся в' самом URL'. При использовании реализации по умолчанию параметры вводятся в оператор '-d', а не в' URL'. Оба используют опцию кодирования '.URL'. Какие-нибудь идеи о том, что может произойти? – Victor

0

Согласно моему опыту в Swift и Objective-C, в то время как мы делаем запрос с POST, тогда не требуется передавать URL-адрес с кодировкой, пока не появятся какие-либо специальные символы или пробел.

Если вы делаете запрос GET, вы всегда должны передавать URL с кодировкой. В POST, какие бы ни были ваши параметры, переданы как данные формы в теле. Ни один код не требует их.

Итак, в вашем коде просто удалите URL-адрес Кодировать часть из метода POST.

0

вы также можете установить кодировку параметров как JSON.

let encoding = Alamofire.ParameterEncoding.JSON 
+0

Уже тестировал этот подход, и он не работал! – Victor

Смежные вопросы