Alamofire: Saat menerima kode status 204, alamofire time out

Dibuat pada 7 Jun 2016  ·  3Komentar  ·  Sumber: Alamofire/Alamofire

Untuk permintaan yang saya harapkan 204 (Tanpa Konten) dikembalikan sebagai kode status, Alamofire malah menyimpulkan ini sebagai kesalahan. Ini mengembalikan kesalahan yang memiliki kode status yang sama dengan permintaan yang habis waktu.

Kode berikut digunakan (penggunaan Alamofire yang sangat mendasar)

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

Komentar yang paling membantu

hei @borek2 dapatkah Anda memastikan bahwa api Anda tidak mengirim parutan header panjang konten kemudian nol, saya memiliki masalah yang sama setelah menggali 3 hari di dalamnya saya menemukan solusinya

Masalah
masalah sebenarnya adalah api saya mengirim header panjang konten dengan nilai parutan kemudian 0 sebagai respons jadi Alamofire memeriksa panjang konten dan dia menemukan bahwa ohh ada parutan panjang konten lalu nol jadi saya perlu membaca data respons sehingga Alamofire akan membaca itu dan server tidak mengembalikan apa pun dan ada batas waktu yang terjadi Server tidak mengembalikan apa pun dan Alamofire mencoba membaca respons

Larutan
pastikan api tidak mengembalikan nilai header panjang konten lebih dari 0 ketika kode status adalah 204

@cnoon kita juga perlu mengubah logika bagaimana Alamofire menangani kode permintaan 204 karena kita akan membaca data tetapi kasus seperti di atas dosis tidak memiliki data respons di 204 sehingga kita tidak perlu membaca data jika kode responsnya 204 tanpa konten

Bersulang. 🍻

Semua 3 komentar

Hai @borek2 ,

Saya baru saja membuat tes yang memverifikasi bahwa semuanya berfungsi seperti yang diharapkan.

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")
}

Jika ini tidak menunjukkan kasus penggunaan Anda, berikan contoh berbeda yang mereplikasi perilaku yang Anda lihat. Kami memiliki penanganan 204 khusus dalam serializer JSON yang akan memastikan Anda menerima case .Success saat menggunakan serializer responseJSON .

Saya akan menutup masalah ini untuk saat ini. Jika Anda memberikan lebih banyak info yang membuat kami yakin mungkin ada masalah di Alamofire, kami akan dengan senang hati membuka kembali dan menyelidiki lebih lanjut.

Bersulang. 🍻

hei @borek2 dapatkah Anda memastikan bahwa api Anda tidak mengirim parutan header panjang konten kemudian nol, saya memiliki masalah yang sama setelah menggali 3 hari di dalamnya saya menemukan solusinya

Masalah
masalah sebenarnya adalah api saya mengirim header panjang konten dengan nilai parutan kemudian 0 sebagai respons jadi Alamofire memeriksa panjang konten dan dia menemukan bahwa ohh ada parutan panjang konten lalu nol jadi saya perlu membaca data respons sehingga Alamofire akan membaca itu dan server tidak mengembalikan apa pun dan ada batas waktu yang terjadi Server tidak mengembalikan apa pun dan Alamofire mencoba membaca respons

Larutan
pastikan api tidak mengembalikan nilai header panjang konten lebih dari 0 ketika kode status adalah 204

@cnoon kita juga perlu mengubah logika bagaimana Alamofire menangani kode permintaan 204 karena kita akan membaca data tetapi kasus seperti di atas dosis tidak memiliki data respons di 204 sehingga kita tidak perlu membaca data jika kode responsnya 204 tanpa konten

Bersulang. 🍻

Terima kasih atas sarannya @indrajitsinh ! Setelah update alamofire saya tidak bermasalah lagi, tapi saran anda akan saya ingat kembali ketika saya mengalami masalah lagi. Terima kasih telah membalas!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat