Apa pola penggunaannya HttpResponseMessage.EnsureSuccessStatusCode()
? Ini membuang Isi pesan dan melempar HttpRequestException
, tapi saya gagal untuk melihat bagaimana menanganinya secara terprogram berbeda dari generik Exception
. Misalnya, ini tidak termasuk HttpStatusCode
, yang akan berguna.
Apakah ada cara untuk mendapatkan lebih banyak info darinya? Adakah yang bisa menunjukkan pola penggunaan yang relevan dari keduanya EnsureSuccessStatusCode()
dan HttpRequestException?
sumber
(int)response.StatusCode
(Lihat msdn.microsoft.com/en-us/library/… )Saya tidak suka EnsureSuccessStatusCode karena tidak mengembalikan apa pun yang berarti. Itulah mengapa saya membuat ekstensi saya sendiri:
kode sumber untuk EnsureSuccessStatusCode Microsoft dapat ditemukan di sini
Versi sinkron berdasarkan tautan SO :
Apa yang saya tidak suka tentang IsSuccessStatusCode adalah bahwa itu tidak dapat digunakan kembali dengan "baik". Misalnya Anda dapat menggunakan library seperti polly untuk mengulangi permintaan jika terjadi masalah jaringan. Dalam hal ini Anda memerlukan kode Anda untuk memunculkan pengecualian sehingga polly atau beberapa pustaka lain dapat menanganinya ...
sumber
EnsureSuccessStatusCode
. Anda selalu membuangresponse.Content
(karena akhirnya dipanggil selalu bahkan setelahreturn;
pernyataan) dan itu menghancurkan konten untuk dibaca lebih lanjut. Implementasi asli membuang konten hanya jika kode status tidak menunjukkan hasil yang sukses.await response.Content.ReadAsStringAsync()
dan kemudian memeriksaif (response.Content != null)
HttpRequest
panggilan, dan mengkonfigurasi kebijakan untuk menangani pengecualian tertentu, dan beberapa pengecualianHttpResponseCode
. Lihat contoh di readme Polly di siniresponse.Content
menjadi null ketika itu baru saja memiliki metode yang dipanggil?Saya menggunakan EnsureSuccessStatusCode ketika saya tidak ingin menangani Exception pada metode yang sama.
Pengecualian yang ditampilkan di GetUserIdAsync akan ditangani di DoSomethingAsync.
sumber
Di bawah ini adalah solusi yang saya usulkan. Satu-satunya kekurangan adalah karena manajer sumber daya kerangka ASP.NET Core bersifat internal ke kerangka kerja, saya tidak dapat secara langsung menggunakan kembali string pesan internasionalisasi Microsoft, jadi saya hanya menggunakan pesan bahasa Inggris verbatim literal di sini.
Pro
ConfigureTestContainer<T>
Kontra
response.EnsureSuccessStatusCode();
dan biarkan server menanganinya.Content
properti sebelum memeriksa status. Mungkin ada situasi di mana hal ini tidak diinginkan, salah satunya adalah inefisiensi.Pemakaian
API
sumber