Apakah ada cara mudah untuk mendapatkan kode status HTTP dari System.Net.WebException
?
c#
http-status-codes
webexception
Gilsham
sumber
sumber
Dengan menggunakan operator bersyarat nol (
?.
) Anda bisa mendapatkan kode status HTTP dengan satu baris kode:Variabel
status
akan berisiHttpStatusCode
. Ketika ada kegagalan yang lebih umum seperti kesalahan jaringan di mana tidak ada kode status HTTP yang dikirim makastatus
akan menjadi nol. Dalam hal ini Anda dapat memeriksaex.Status
untuk mendapatkanWebExceptionStatus
.Jika Anda hanya ingin string deskriptif untuk login jika terjadi kegagalan, Anda dapat menggunakan operator null-coalescing (
??
) untuk mendapatkan kesalahan yang relevan:Jika pengecualian dilemparkan sebagai akibat dari kode status HTTP 404 string akan berisi "NotFound". Di sisi lain, jika server sedang offline, string akan berisi "ConnectFailure" dan seterusnya.
sumber
?.
operator itu awalnya bernama operator propagasi nol atau operator kondisional nol selama rilis pratinjau. Tetapi pemanen Atlassian memberi peringatan untuk menggunakan operator propagasi nol dalam skenario seperti itu. Senang mengetahui bahwa itu juga disebut operator null-kondisional.ini hanya berfungsi jika WebResponse adalah HttpWebResponse.
sumber
(Saya menyadari bahwa pertanyaannya sudah lama, tetapi ini termasuk salah satu hit teratas di Google.)
Situasi umum di mana Anda ingin mengetahui kode respons ada dalam penanganan pengecualian. Pada C # 7, Anda dapat menggunakan pencocokan pola untuk benar-benar hanya memasukkan klausa tangkapan jika pengecualian cocok dengan predikat Anda:
Ini dapat dengan mudah diperluas ke tingkat lebih lanjut, seperti dalam kasus ini di mana
WebException
sebenarnya pengecualian dalam yang lain (dan kami hanya tertarik404
):Akhirnya: perhatikan bagaimana tidak perlu melemparkan kembali pengecualian dalam klausa tangkapan ketika tidak sesuai dengan kriteria Anda, karena kami tidak memasukkan klausa di tempat pertama dengan solusi di atas.
sumber
Anda dapat mencoba kode ini untuk mendapatkan kode status HTTP dari WebException. Ia bekerja di Silverlight juga karena SL tidak memiliki WebExceptionStatus.ProtocolError didefinisikan.
sumber
return 0
? atau lebih baikHttpStatusCode?
( nullable )?var code = GetHttpStatusCode(ex); if (code != HttpStatusCode.InternalServerError) {EventLog.WriteEntry( EventLog.WriteEntry("MyApp", code, System.Diagnostics.EventLogEntryType.Information, 1);}
Saya tidak yakin apakah ada tetapi jika ada properti seperti itu tidak akan dianggap dapat diandalkan. A
WebException
dapat dipecat karena alasan selain kode kesalahan HTTP termasuk kesalahan jaringan sederhana. Mereka tidak memiliki kode kesalahan http yang cocok.Bisakah Anda memberi kami sedikit lebih banyak info tentang apa yang ingin Anda capai dengan kode itu. Mungkin ada cara yang lebih baik untuk mendapatkan informasi yang Anda butuhkan.
sumber