Alamofire: isSuccessは、エラーコードがあっても、常にtrueです。

作成日 2015年10月11日  ·  3コメント  ·  ソース: Alamofire/Alamofire

サーバーは応答コード404を送信していますが、フレームワークがそれを成功として解釈しているようです。

コード:

Alamofire.request(.GET, Constants.Path.rootUrl + "/api/users", parameters: ["username" : usernameString, "limit":3] , headers: ["tb-token" : userToken!])
            .responseJSON { response in


                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization


                let results = response.result

                if let JSON = response.result.value {

                    if response.result.isSuccess == true {
                        print("Success with JSON: \(JSON)")
                        self.tableView.hidden = false

                        self.resultsDict = results.value as! NSArray

                        let resultsNumber = results.value!.count

                        self.numberOfResults.text = "Results(\(resultsNumber))"
                        self.numberOfResults.hidden = false

                        self.resultsN = resultsNumber
                        self.loadedMode = true


                        self.tableView.reloadData()
                        self.tableView.hidden = false
                    }
                }
                    else {print("error")}

        }

isSuccessは、サーバーが送り返すコードに関係なく、常にtrueです。

question response serializer

全てのコメント3件

デフォルトでは、Alamofireは、応答シリアライザー(この例では、 JSONResponseSerializerによって使用される.responseJSON )を通過するすべての応答を成功として登録します。 リクエストのレスポンスコードを検証したい場合は、リクエストチェーンに.validate()を追加するだけです。 これにより、応答コードが200〜299の範囲になります。 ドキュメントで説明されているます

あなたの場合:

Alamofire.request(.GET, Constants.Path.rootUrl + "/api/users", parameters: ["username" : usernameString, "limit":3] , headers: ["tb-token" : userToken!])
            .validate()
            .responseJSON { response in }

ありがとう、お守りのように働きました!

ありがとう、働いた。 .validate() 、応答が検証されます。
しかし、別の問題があります。 .validate()を使用すると、応答値が得られません: response.result.value
解決策や回避策はありますか?
ありがとう

このページは役に立ちましたか?
0 / 5 - 0 評価