2016-08-10 23 views
0

だから、私はデフォルトのオプションでAlamofireで.POST要求をやろうとしている:Alamofire .POSTエンコーディング(.URL)

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

この1つはうまく動作します。ドキュメントにあるように、パラメータのデフォルトエンコーディングは.URLです。

は、今私は私のコードは、このガイド以下のルーターを作成を改善しようとしています:実装の最後に https://grokswift.com/router/

は、手動でパラメータをエンコードするために必要とされます。デフォルトはそうのように、私は今ここに.URLエンコーディングを使用している、働いていたのであれば、:

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

パラメータは明らかに間違った形式で送信されているされているとして今要求は、動作しません。

私はAPIが機能していると確信しています。私はPostmanでテストしており、パラメータはform-dataオプションで送信されています。

私を助けることができる誰かに事前に感謝!

+0

多分alamofireの 'multipartFormData'を使ってみることができます – Tj3n

+0

@ Tj3n私はこれを考えました。しかし、デフォルトの要求では 'multipartFormData'なしでどうすれば動作できますか?エンコーディング方式が同じであれば、ルータではできません。 – Victor

+0

これについてはよくわからない:多分あなたはリクエストのHTTPBodyをプリントアウトし、値を見るためにそれをデコードすることができますか? – Tj3n

答えて

1

それが前に働いていた場合、それはURLエンコード使用していたことを二重にチェック:

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

あなたの要求のための同等のcURL文を表示する必要があります。

次に、.URLエンコーディングを使用するようにルータを変更し、debugPrintの出力が変化するかどうかを確認してください。

+0

ねえ!私はこれを試しましたが、実際には.URLエンコーディングがデフォルトであります。私が 'Alamofire 'を使うとき。'Alamofire.request(.POST、baseApiAddress、parameters:parameters、encoding:.URL).validate().ResponseJSON'または' Alamofire.request(.POST、baseApiAddress + "/ users"、parameters)は、デフォルトの実装をリクエストします。 :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では、あなたのパラメータは何か、フォームデータとして渡されます。どんなコードでもそのコードを必要としません。

コードでは、POSTメソッドからURLエンコード部分を削除するだけです。

0

また、パラメータエンコーディングをJSONとして設定することもできます。

let encoding = Alamofire.ParameterEncoding.JSON 
+0

既にこの方法でテストされており、うまくいかなかった! – Victor

関連する問題