2

Alamofire を使用して次の API を試していますが、この API には複数の「to」フィールドがあります。「to」メールの配列をパラメーターとして渡そうとしました。エラーは表示されませんが、すべてのメールに送信されませんでした。APIは正しいです。端末からテストしました。どんな提案も心から歓迎します。

http -a email:pass -f POST 'sampleUrl' from="email@email.com" to="ongkur.cse@gmail.com" to="emailgmail@email.com" subject="test_sub" bodyText="testing hello"

私は自分のコードを与えています:

class func sendMessage(message:MessageModel, delegate:RestAPIManagerDelegate?) {

    let urlString = "http://localhost:8080/app/user/messages"

    var parameters = [String:AnyObject]()

    parameters = [

        "from": message.messageFrom.emailAddress
    ]

    var array = [String]()

    for to in message.messageTO {

        array.append(to)
    }

    parameters["to"] = array

    for cc in message.messageCC {

        parameters["cc"] = cc.emailAddress;
    }

    for bcc in message.messageBCC {

        parameters["bcc"] = bcc.emailAddress;
    }

    parameters["subject"] = message.messageSubject;
    parameters["bodyText"] = message.bodyText;

    Alamofire.request(.POST, urlString, parameters: parameters)
        .authenticate(user: MessageManager.sharedInstance().primaryUserName, password: MessageManager.sharedInstance().primaryPassword)
        .validate(statusCode: 200..<201)
        .validate(contentType: ["application/json"])
        .responseJSON {

            (_, _, jsonData, error) in

            if(error != nil) {

                println("\n sendMessage attempt json response:")
                println(error!)
                delegate?.messageSent?(false)
                return
            }
            println("Server response during message sending:\n")
            let swiftyJSONData = JSON(jsonData!)
            println(swiftyJSONData)
            delegate?.messageSent?(true)
    }
}
4

1 に答える 1

0

まず、API を自分で作成した場合は、API を変更して、同じパラメーター名を複数回使用するのではなく、'to' レシーバーの配列を期待することを検討する必要があります。

back2dosがこの回答で述べているように: https://stackoverflow.com/a/1898078/672989

POST は同じキーに対して複数の値を持つ可能性がありますが、一部のサーバーではそれを適切に処理することさえできないため、使用には注意が必要です。これがおそらくサポートされていない理由です...リストに、パラメーターが一度だけ入ってくると、すべてがチョークし始め、突然文字列か何かができてしまう可能性があります...

そして、私は彼が正しいと思います。

この場合、AFNetworking では不可能なのと同じように、Alamofire でもこれは不可能だと思います: https://github.com/AFNetworking/AFNetworking/issues/21

Alamofire はおそらく、キーの重複を許可しないディクショナリに POST パラメータを格納します。

于 2014-11-26T14:27:35.407 に答える