2017-06-10 5 views
0

私のプロジェクトでこれを行う必要があります:Alamofire共通キーと複数の値を持つパラメータを渡すか?

AlamofireのURLに手作業で文字列を追加すると簡単にこれを行うことができますが、私はそれを望ましくありません。私はパラメータオブジェクトとしてパラメータをします。私が何をしてきたパラメータ

enter image description here

のための1つの共通鍵で

複数の値:

public func findCreate(tags: [String], withBlock completion: @escaping FindCreateServiceCallBack) { 

    /* http://baseurlsample.com/v1/categories/create_multiple?category_name[]=fff&category_name[]=sss */ 

    let findCreateEndpoint = CoreService.Endpoint.FindMultipleCategories 

    let parameters: Parameters = ["category_name[]" : tags] 

    Alamofire.request(
     findCreateEndpoint, 
     method: .post, 
     parameters: parameters, 
     encoding: URLEncoding(destination: .queryString), 
     headers: nil 
     ).responseJSON { (response) in 
      print(response) 
    } 
//.... 
} 

現在の結果を、私はこれを実行する場合は大丈夫ですが、値が送られましたサーバーに[""]があります。たとえば、

また、質問は、私の全コードの一部が間違っていますか? 1つの共通キーと複数の値を持つ上記のようなパラメータを送信するにはどうすればよいですか?

また、私はencoding: JSONEncoding.prettyPrintedまたはencoding: JSONEncoding.defaultを追加した場合、私はステータスコード500を取得Alamofire.request(にエンコーディングオプションを追加しようとしています。

同じ質問がありますが、正確な答えがないリンクがいくつかありますが、私はいつもカスタムのエンコーディングを使用しているような回答を持つ投稿を見ています。

追加情報:

これは動作しますが、私は、複数の文字列を送信する必要があります。

let parameters: [String : Any] = ["category_name[]" : tags.first!] 

これも同様に動作します。

Alamofire.request("http://baseurlsample.com/v1/categories/create_multiple?category_name[]=fff&category_name[]=sss", method: .post).responseJSON { (data) in 
    print(data) 
} 

答えて

1

この形式のカスタムエンコーディングは必要ありません。

あなたは、このように符号化されたパラメータ送信することができます。

let parameters: Parameters = ["category_name": ["rock", "paper"]] 
:(あなたがすでにやっている) URLEncodingを使用して、アレイ内の同じキーを持つ必要があり、複数の値を含むことで

category_name[]=rock&category_name[]=paper 

category_nameの後に[]を追加するので、parametersを宣言するときには含めないでください。

+0

ありがとう、クリスティーナ!あなたは素晴らしいです! ;) – Glenn

関連する問題