Alamofire: ステータスコード:404、ただしresponse.result = SUCCESS

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

1

response serializer support

最も参考になるコメント

応答ステータスコードを検証していないため、404が.Successのケースを返す可能性があります。 responseDataシリアライザーが行うのは、エラーがなかったこと(応答ステータスコードを検証していないためエラーが発生しないこと)、またはデータが存在することを検証することだけです。

public static func dataResponseSerializer() -> ResponseSerializer<NSData, NSError> {
    return ResponseSerializer { _, _, data, error in
        guard error == nil else { return .Failure(error!) }

        guard let validData = data where validData.length > 0 else {
            let failureReason = "Data could not be serialized. Input data was nil or zero length."
            let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
            return .Failure(error)
        }

        return .Success(validData)
    }
}

あなたの場合、エラーをスローしていない404を受信して​​おり、サーバーはデータを返しています。 したがって、 responseDataシリアライザーは成功します。 404が常にエラーをスローすることが予想される場合は、 responseDataの前に.validate(statusCode: [200])メソッドを追加で使用する必要があります。 詳細については、READMEの検証セクションをご覧ください。

将来的には、このような質問は、 alamofireタグを使用したスタックオーバーフローに適しています。 バグや機能のリクエストにはGitHubを使用しています。 🍻


貢献ガイドラインから

質問をする

GitHubをサポートフォーラムとして使用していません。 プロジェクト自体に固有ではない使用法に関する質問については、代わりにStackOverflowで質問してください。 そうすることで、問題をすばやく解決できる可能性が高くなり、同じ質問を持つ他の人が答えを見つけられるようになります。 これにより、メンテナは他の人のためにプロジェクトの改善に集中することもできます。

全てのコメント3件

応答ステータスコードを検証していないため、404が.Successのケースを返す可能性があります。 responseDataシリアライザーが行うのは、エラーがなかったこと(応答ステータスコードを検証していないためエラーが発生しないこと)、またはデータが存在することを検証することだけです。

public static func dataResponseSerializer() -> ResponseSerializer<NSData, NSError> {
    return ResponseSerializer { _, _, data, error in
        guard error == nil else { return .Failure(error!) }

        guard let validData = data where validData.length > 0 else {
            let failureReason = "Data could not be serialized. Input data was nil or zero length."
            let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
            return .Failure(error)
        }

        return .Success(validData)
    }
}

あなたの場合、エラーをスローしていない404を受信して​​おり、サーバーはデータを返しています。 したがって、 responseDataシリアライザーは成功します。 404が常にエラーをスローすることが予想される場合は、 responseDataの前に.validate(statusCode: [200])メソッドを追加で使用する必要があります。 詳細については、READMEの検証セクションをご覧ください。

将来的には、このような質問は、 alamofireタグを使用したスタックオーバーフローに適しています。 バグや機能のリクエストにはGitHubを使用しています。 🍻


貢献ガイドラインから

質問をする

GitHubをサポートフォーラムとして使用していません。 プロジェクト自体に固有ではない使用法に関する質問については、代わりにStackOverflowで質問してください。 そうすることで、問題をすばやく解決できる可能性が高くなり、同じ質問を持つ他の人が答えを見つけられるようになります。 これにより、メンテナは他の人のためにプロジェクトの改善に集中することもできます。

本当に感謝しております

私はこの問題に苦しんでいます...どうもありがとうございました。

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