Alamofire: 204ステータスコードを受信すると、alamofireがタイムアウトします

作成日 2016年06月07日  ·  3コメント  ·  ソース: Alamofire/Alamofire

204(コンテンツなし)がステータスコードとして返されることを期待しているリクエストの場合、Alamofireは代わりにこれをエラーとして推測します。 タイムアウトしたリクエストと同じステータスコードのエラーを返します。

次のコードが使用されました(Alamofireの非常に基本的な使用法)

alamofireManager.request(request)
        .validate(statusCode: 200..<400)
        .responseJSON(options: .AllowFragments) { (response: Response<AnyObject, NSError>) in
                handleAlamofireResponse(response)
         }
question response serializer

最も参考になるコメント

ちょっと@ borek2あなたのAPIがcontent-lengthヘッダーおろし金を送信しないことを確認できますか?それからゼロ、私はそれを3日間掘った後に同じ問題を抱えていました私は解決策を見つけました

問題
実際の問題は、私のapiが応答として値おろし金を0にしてコンテンツ長ヘッダーを送信しているため、Alamofireがコンテンツ長をチェックし、コンテンツ長おろし金がゼロであることがわかったため、応答データを読み取る必要があるため、Alamofireが読み取りますそれとサーバーは何も返さず、タイムアウトが発生しましたサーバーは何も返さず、Alamofireは応答を読み取ろうとします

解決
ステータスコードが204の場合、APIがcontent-lengthヘッダー値おろし金を返さないことを確認してください。

@cnoonまた、データを読み取るため、Alamofireが204リクエストコードを処理する方法のロジックを変更する必要がありますが、上記のような場合、204には応答データがないため、応答コードが204コンテンツなし

乾杯。 🍻

全てのコメント3件

こんにちは@ borek2

すべてが期待どおりに機能していることを確認するテストを作成しました。

func testDeleteWith204ResponseStatusCode() {
    let expectation = expectationWithDescription("204 should succeed")

    Alamofire.request(.DELETE, "https://httpbin.org/status/204")
        .validate(statusCode: 200..<400)
        .responseJSON(options: .AllowFragments) { response in
            print(response.response)
            print(response)
            expectation.fulfill()
        }

    waitForExpectationsWithTimeout(timeout, handler: nil)

    print("Yay...204 works as expected with responseJSON serializer")
}

これがユースケースを示していない場合は、表示されている動作を再現する別の例を提供してください。 JSONシリアライザーにはカスタム204処理があり、 responseJSONシリアライザーを使用するときに.Successケースを確実に受け取る必要があります。

今のところ、この問題を解決します。 Alamofireに問題がある可能性があると思われる情報をさらに提供していただければ、喜んで再開し、さらに調査します。

乾杯。 🍻

ちょっと@ borek2あなたのAPIがcontent-lengthヘッダーおろし金を送信しないことを確認できますか?それからゼロ、私はそれを3日間掘った後に同じ問題を抱えていました私は解決策を見つけました

問題
実際の問題は、私のapiが応答として値おろし金を0にしてコンテンツ長ヘッダーを送信しているため、Alamofireがコンテンツ長をチェックし、コンテンツ長おろし金がゼロであることがわかったため、応答データを読み取る必要があるため、Alamofireが読み取りますそれとサーバーは何も返さず、タイムアウトが発生しましたサーバーは何も返さず、Alamofireは応答を読み取ろうとします

解決
ステータスコードが204の場合、APIがcontent-lengthヘッダー値おろし金を返さないことを確認してください。

@cnoonまた、データを読み取るため、Alamofireが204リクエストコードを処理する方法のロジックを変更する必要がありますが、上記のような場合、204には応答データがないため、応答コードが204コンテンツなし

乾杯。 🍻

@indrajitsinhの提案を

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