Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Scott Mitchell
Melihat atau mengunduh kode sampel (cara mengunduh)
Ketika kesalahan runtime terjadi pada aplikasi web dalam produksi, penting untuk memberi tahu pengembang dan mencatat kesalahan sehingga dapat didiagnosis pada titik waktu selanjutnya. Tutorial ini memberikan gambaran umum tentang bagaimana ASP.NET memproses kesalahan runtime dan melihat salah satu cara untuk menjalankan kode kustom setiap kali gelembung pengecualian yang tidak tertangani hingga runtime ASP.NET.
Pendahuluan
Ketika pengecualian yang tidak tertangani terjadi dalam aplikasi ASP.NET, itu menggelegak hingga runtime ASP.NET, yang meningkatkan Error
peristiwa dan menampilkan halaman kesalahan yang sesuai. Ada tiga jenis halaman kesalahan yang berbeda: Runtime Error Yellow Screen of Death (YSOD); Detail Pengecualian YSOD; dan halaman kesalahan kustom. Dalam tutorial sebelumnya, kami mengonfigurasi aplikasi untuk menggunakan halaman kesalahan kustom untuk pengguna jarak jauh dan Detail Pengecualian YSOD untuk pengguna yang mengunjungi secara lokal.
Menggunakan halaman kesalahan kustom ramah manusia yang cocok dengan tampilan dan nuansa situs lebih disukai daripada Runtime Error YSOD default, tetapi menampilkan halaman kesalahan kustom hanyalah satu bagian dari solusi penanganan kesalahan komprehensif. Ketika kesalahan terjadi dalam aplikasi dalam produksi, penting bagi pengembang untuk diberi tahu tentang kesalahan sehingga mereka dapat mengungkap penyebab pengecualian dan mengatasinya. Selain itu, detail kesalahan harus dicatat sehingga kesalahan dapat diperiksa dan didiagnosis di lain waktu.
Tutorial ini menunjukkan cara mengakses detail pengecualian yang tidak tertangani sehingga mereka dapat dicatat dan pengembang diberi tahu. Dua tutorial setelah ini mengeksplorasi pustaka pengelogan kesalahan yang, setelah sedikit konfigurasi, akan secara otomatis memberi tahu pengembang tentang kesalahan runtime dan mencatat detailnya.
Catatan
Informasi yang diperiksa dalam tutorial ini paling berguna jika Anda perlu memproses pengecualian yang tidak tertangani dengan cara yang unik atau disesuaikan. Dalam kasus di mana Anda hanya perlu mencatat pengecualian dan memberi tahu pengembang, menggunakan pustaka pengelogan kesalahan adalah caranya. Dua tutorial berikutnya memberikan gambaran umum tentang dua pustaka tersebut.
Menjalankan Kode SaatError
Peristiwa Dinaikkan
Peristiwa menyediakan mekanisme untuk memberi sinyal bahwa sesuatu yang menarik telah terjadi, dan agar objek lain menjalankan kode sebagai respons. Sebagai pengembang ASP.NET Anda terbiasa berpikir dalam hal peristiwa. Jika Anda ingin menjalankan beberapa kode saat pengunjung mengklik Tombol tertentu, Anda membuat penanganan aktivitas untuk acara Tombol tersebut Click
dan meletakkan kode Anda di sana. Mengingat bahwa runtime ASP.NET menaikkan peristiwanya Error
setiap kali terjadi pengecualian yang tidak tertangani, kode untuk mencatat detail kesalahan akan masuk ke penanganan aktivitas. Tetapi bagaimana Anda membuat penanganan aktivitas untuk peristiwa tersebut Error
?
Peristiwa ini Error
adalah salah satu dari banyak peristiwa di HttpApplication
kelas yang dinaikkan pada tahap tertentu dalam alur HTTP selama masa pakai permintaan. Misalnya, peristiwa kelasBeginRequest
dinaikkan pada awal setiap permintaan; peristiwanyaAuthenticateRequest
dinaikkan ketika modul keamanan telah mengidentifikasi pemohon. HttpApplication
Peristiwa ini HttpApplication
memberi pengembang halaman sarana untuk menjalankan logika kustom di berbagai titik dalam masa pakai permintaan.
Penanganan aktivitas untuk HttpApplication
peristiwa dapat ditempatkan dalam file khusus bernama Global.asax
. Untuk membuat file ini di situs web Anda, tambahkan item baru ke akar situs web Anda menggunakan templat Kelas Aplikasi Global dengan nama Global.asax
.
Gambar 1: Tambahkan Global.asax
ke aplikasi web Anda
(Klik untuk melihat gambar ukuran penuh)
Konten dan struktur file yang Global.asax
dibuat oleh Visual Studio sedikit berbeda berdasarkan apakah Anda menggunakan Proyek Aplikasi Web (WAP) atau Proyek Situs Web (WSP). Dengan WAP, diimplementasikan Global.asax
sebagai dua file terpisah - Global.asax
dan Global.asax.vb
. File Global.asax
tidak berisi apa pun kecuali arahan @Application
yang mereferensikan .vb
file; penanganan aktivitas yang menarik didefinisikan dalam Global.asax.vb
file. Untuk WSP, hanya satu file yang dibuat, Global.asax
, dan penanganan aktivitas didefinisikan dalam <script runat="server">
blok.
File Global.asax
yang dibuat dalam templat Kelas Aplikasi Global WAP by Visual Studio mencakup penanganan aktivitas bernama Application_BeginRequest
, , Application_AuthenticateRequest
dan Application_Error
, yang merupakan penanganan aktivitas untuk HttpApplication
peristiwa BeginRequest
, , AuthenticateRequest
dan Error
, masing-masing. Ada juga penanganan aktivitas bernama Application_Start
, , Session_Start
, Application_End
dan Session_End
, yang merupakan penanganan aktivitas yang diaktifkan ketika aplikasi web dimulai, ketika sesi baru dimulai, ketika aplikasi berakhir, dan ketika sesi berakhir, masing-masing. File Global.asax
yang dibuat di WSP oleh Visual Studio hanya Application_Error
berisi penanganan aktivitas , , Session_Start
Application_Start
, Application_End
, dan Session_End
.
Catatan
Saat menyebarkan aplikasi ASP.NET, Anda perlu menyalin Global.asax
file ke lingkungan produksi. File Global.asax.vb
, yang dibuat di WAP, tidak perlu disalin ke produksi karena kode ini dikompilasi ke dalam rakitan proyek.
Penanganan aktivitas yang dibuat oleh templat Kelas Aplikasi Global Visual Studio tidak lengkap. Anda dapat menambahkan penanganan aktivitas untuk peristiwa apa pun HttpApplication
dengan memberi nama penanganan Application_EventName
aktivitas . Misalnya, Anda dapat menambahkan kode berikut ke Global.asax
file untuk membuat penanganan aktivitas untuk peristiwa tersebutAuthorizeRequest
:
Sub Application_AuthorizeRequest(ByVal sender As Object, ByVal e As EventArgs)
' Event handler code
End Sub
Demikian juga, Anda dapat menghapus penanganan aktivitas apa pun yang dibuat oleh templat Kelas Aplikasi Global yang tidak diperlukan. Untuk tutorial ini, kami hanya memerlukan penanganan aktivitas untuk Error
acara; jangan ragu untuk menghapus penanganan aktivitas lain dari Global.asax
file.
Catatan
Modul HTTP menawarkan cara lain untuk menentukan penanganan aktivitas untuk HttpApplication
peristiwa. Modul HTTP dibuat sebagai file kelas yang dapat ditempatkan langsung dalam proyek aplikasi web atau dipisahkan ke dalam pustaka kelas terpisah. Karena dapat dipisahkan menjadi pustaka kelas, Modul HTTP menawarkan model yang lebih fleksibel dan dapat digunakan kembali untuk membuat HttpApplication
penanganan aktivitas. Global.asax
Sedangkan file khusus untuk aplikasi web tempatnya berada, Modul HTTP dapat dikompilasi ke dalam rakitan, di mana menambahkan Modul HTTP ke situs web sesendah menjatuhkan perakitan di Bin
folder dan mendaftarkan Modul di Web.config
. Tutorial ini tidak melihat pembuatan dan penggunaan Modul HTTP, tetapi dua pustaka pengelogan kesalahan yang digunakan dalam dua tutorial berikut diimplementasikan sebagai Modul HTTP. Untuk latar belakang lebih lanjut tentang manfaat Modul HTTP, lihat Menggunakan Modul HTTP dan Handler untuk Membuat Komponen ASP.NET yang Dapat Dicolokkan.
Mengambil Informasi Tentang Pengecualian yang Tidak Tertangani
Pada titik ini kami memiliki file Global.asax dengan penanganan Application_Error
aktivitas. Ketika penanganan aktivitas ini dijalankan, kita perlu memberi tahu pengembang tentang kesalahan dan mencatat detailnya. Untuk menyelesaikan tugas-tugas ini, pertama-tama kita perlu menentukan detail pengecualian yang dimunculkan. Gunakan metode objek GetLastError
Server untuk mengambil detail pengecualian yang tidak tertangani yang menyebabkan peristiwa diaktifkanError
.
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
End Sub
Metode mengembalikan GetLastError
objek jenis Exception
, yang merupakan jenis dasar untuk semua pengecualian dalam .NET Framework. Namun, dalam kode di atas saya mentransmisikan objek Pengecualian yang dikembalikan oleh GetLastError
ke dalam HttpException
objek. Error
Jika peristiwa dipicu karena pengecualian dilemparkan selama pemrosesan sumber daya ASP.NET maka pengecualian yang dilemparkan dibungkus dalam HttpException
. Untuk mendapatkan pengecualian aktual yang mengecilkan peristiwa Kesalahan, gunakan InnerException
properti . Error
Jika peristiwa dimunculkan karena pengecualian berbasis HTTP, seperti permintaan untuk halaman yang tidak ada, HttpException
akan dilemparkan, tetapi tidak memiliki pengecualian dalam.
Kode berikut menggunakan GetLastErrormessage
untuk mengambil informasi tentang pengecualian yang memicu Error
peristiwa, menyimpan HttpException
dalam variabel bernama lastErrorWrapper
. Kemudian menyimpan jenis, pesan, dan jejak tumpukan pengecualian asal dalam tiga variabel string, memeriksa untuk melihat apakah lastErrorWrapper
adalah pengecualian aktual yang memicu Error
peristiwa (dalam kasus pengecualian berbasis HTTP) atau jika itu hanya pembungkus untuk pengecualian yang dilemparkan saat memproses permintaan.
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
Dim lastError As Exception = lastErrorWrapper
If lastErrorWrapper.InnerException IsNot Nothing Then
lastError = lastErrorWrapper.InnerException
End If
Dim lastErrorTypeName As String = lastError.GetType().ToString()
Dim lastErrorMessage As String = lastError.Message
Dim lastErrorStackTrace As String = lastError.StackTrace
End Sub
Pada titik ini Anda memiliki semua informasi yang Anda butuhkan untuk menulis kode yang akan mencatat detail pengecualian ke tabel database. Anda dapat membuat tabel database dengan kolom untuk setiap detail kesalahan yang menarik - jenis, pesan, jejak tumpukan, dan sebagainya - bersama dengan bagian informasi berguna lainnya, seperti URL halaman yang diminta dan nama pengguna yang saat ini masuk. Di penanganan Application_Error
aktivitas, Anda kemudian akan menyambungkan ke database dan menyisipkan rekaman ke dalam tabel. Demikian juga, Anda dapat menambahkan kode untuk memberi tahu pengembang tentang kesalahan melalui email.
Pustaka pengelogan kesalahan yang diperiksa dalam dua tutorial berikutnya menyediakan fungsionalitas seperti itu di luar kotak, jadi tidak perlu membuat pengelogan kesalahan ini dan pemberitahuan sendiri. Namun, untuk menggambarkan bahwa Error
peristiwa sedang dinaikkan dan bahwa Application_Error
penanganan aktivitas dapat digunakan untuk mencatat detail kesalahan dan memberi tahu pengembang, mari kita tambahkan kode yang memberi tahu pengembang ketika kesalahan terjadi.
Memberi tahu Pengembang Ketika Terjadi Pengecualian yang Tidak Tertangani
Ketika pengecualian yang tidak tertangani terjadi di lingkungan produksi, penting untuk memperingatkan tim pengembangan sehingga mereka dapat menilai kesalahan dan menentukan tindakan apa yang perlu diambil. Misalnya, jika ada kesalahan dalam menyambungkan ke database maka Anda harus memeriksa kembali string koneksi Anda dan, mungkin, membuka tiket dukungan dengan perusahaan hosting web Anda. Jika pengecualian terjadi karena kesalahan pemrograman, kode tambahan atau logika validasi mungkin perlu ditambahkan untuk mencegah kesalahan tersebut di masa mendatang.
Kelas .NET Framework di System.Net.Mail
namespace memudahkan pengiriman email. Kelas MailMessage
mewakili pesan email dan memiliki properti seperti To
, , From
Subject
, Body
, dan Attachments
. SmtpClass
digunakan untuk mengirim MailMessage
objek menggunakan server SMTP tertentu; pengaturan server SMTP dapat ditentukan secara terprogram atau deklaratif dalam <system.net>
elemen di Web.config file
. Untuk informasi selengkapnya tentang mengirim pesan email dalam aplikasi ASP.NET lihat artikel saya, Mengirim Email dari Situs Halaman Web ASP.NET, dan System.Net.Mail.
Catatan
Elemen <system.net>
berisi pengaturan server SMTP yang SmtpClient
digunakan oleh kelas saat mengirim email. Perusahaan hosting web Anda kemungkinan memiliki server SMTP yang dapat Anda gunakan untuk mengirim email dari aplikasi Anda. Lihat bagian dukungan host web Anda untuk informasi tentang pengaturan server SMTP yang harus Anda gunakan di aplikasi web Anda.
Tambahkan kode berikut ke penanganan Application_Error
aktivitas untuk mengirim email kepada pengembang saat terjadi kesalahan:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
Dim lastError As Exception = lastErrorWrapper
If lastErrorWrapper.InnerException IsNot Nothing Then
lastError = lastErrorWrapper.InnerException
End If
Dim lastErrorTypeName As String = lastError.GetType().ToString()
Dim lastErrorMessage As String = lastError.Message
Dim lastErrorStackTrace As String = lastError.StackTrace
Const ToAddress As String = "support@example.com"
Const FromAddress As String = "support@example.com"
Const Subject As String = "An Error Has Occurred!"
' Create the MailMessage object
Dim mm As New MailMessage(FromAddress, ToAddress)
mm.Subject = Subject
mm.IsBodyHtml = True
mm.Priority = MailPriority.High
mm.Body = string.Format( _
"<html>" & vbCrLf & _
" <body>" & vbCrLf & _
" <h1>An Error Has Occurred!</h1>" & vbCrLf & _
" <table cellpadding=""5"" cellspacing=""0"" border=""1"">" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">URL:</td>" & vbCrLf & _
" <td>{0}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">User:</td>" & vbCrLf & _
" <td>{1}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">Exception Type:</td>" & vbCrLf & _
" <td>{2}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">Message:</td>" & vbCrLf & _
" <td>{3}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">Stack Trace:</td>" & vbCrLf & _
" <td>{4}</td>" & vbCrLf & _
" </tr> " & vbCrLf & _
" </table>" & vbCrLf & _
" </body>" & vbCrLf & _
"</html>", _
Request.RawUrl, _
User.Identity.Name, _
lastErrorTypeName, _
lastErrorMessage, _
lastErrorStackTrace.Replace(Environment.NewLine, "<br />"))
'Attach the Yellow Screen of Death for this error
Dim YSODmarkup As String = lastErrorWrapper.GetHtmlErrorMessage()
If Not String.IsNullOrEmpty(YSODmarkup) Then
Dim YSOD As Attachment = _
Attachment.CreateAttachmentFromString(YSODmarkup, "YSOD.htm")
mm.Attachments.Add(YSOD)
End If
' Send the email
Dim smtp As New SmtpClient()
smtp.Send(mm)
End Sub
Meskipun kode di atas cukup panjang, sebagian besar membuat HTML yang muncul dalam email yang dikirim ke pengembang. Kode dimulai dengan mereferensikan yang HttpException
dikembalikan oleh GetLastError
metode (lastErrorWrapper
). Pengecualian aktual yang dimunculkan oleh permintaan diambil melalui lastErrorWrapper.InnerException
dan ditetapkan ke variabel lastError
. Informasi pelacakan jenis, pesan, dan tumpukan diambil dari lastError
dan disimpan dalam tiga variabel string.
Selanjutnya, MailMessage
objek bernama mm
dibuat. Isi email diformat HTML dan menampilkan URL halaman yang diminta, nama pengguna yang saat ini masuk, dan informasi tentang pengecualian (jenis, pesan, dan jejak tumpukan). Salah satu hal keren tentang HttpException
kelas ini adalah Anda dapat menghasilkan HTML yang digunakan untuk membuat Detail Pengecualian Yellow Screen of Death (YSOD) dengan memanggil metode GetHtmlErrorMessage. Metode ini digunakan di sini untuk mengambil markup YSOD Detail Pengecualian dan menambahkannya ke email sebagai lampiran. Satu kata hati-hati: jika pengecualian yang memicu Error
peristiwa adalah pengecualian berbasis HTTP (seperti permintaan untuk halaman yang tidak ada) maka GetHtmlErrorMessage
metode akan mengembalikan null
.
Langkah terakhir adalah mengirim MailMessage
. Ini dilakukan dengan membuat metode baru SmtpClient
dan memanggil metodenya Send
.
Catatan
Sebelum menggunakan kode ini di aplikasi web, Anda harus mengubah nilai dalam ToAddress
konstanta dan FromAddress
dari support@example.com ke alamat email apa pun yang harus dikirim dan berasal oleh email pemberitahuan kesalahan. Anda juga harus menentukan pengaturan server SMTP di bagian <system.net>
di Web.config
. Konsultasikan dengan penyedia host web Anda untuk menentukan pengaturan server SMTP yang akan digunakan.
Dengan kode ini di tempat kapan saja ada kesalahan pengembang dikirimi pesan email yang meringkas kesalahan dan menyertakan YSOD. Dalam tutorial sebelumnya kami menunjukkan kesalahan runtime dengan mengunjungi Genre.aspx dan meneruskan nilai yang tidak valid ID
melalui querystring, seperti Genre.aspx?ID=foo
. Mengunjungi halaman dengan Global.asax
file di tempat menghasilkan pengalaman pengguna yang sama seperti dalam tutorial sebelumnya - di lingkungan pengembangan Anda akan terus melihat Detail Pengecualian Layar Kuning Kematian, sementara di lingkungan produksi Anda akan melihat halaman kesalahan kustom. Selain perilaku yang ada ini, pengembang dikirimi email.
Gambar 2 menunjukkan email yang diterima saat mengunjungi Genre.aspx?ID=foo
. Isi email meringkas informasi pengecualian, sementara YSOD.htm
lampiran menampilkan konten yang ditampilkan dalam Detail Pengecualian YSOD (lihat Gambar 3).
Gambar 2: Pengembang Dikirimi Pemberitahuan Email Setiap Kali Ada Pengecualian yang Tidak Tertangani
(Klik untuk melihat gambar ukuran penuh)
Gambar 3: Pemberitahuan Email Menyertakan Detail Pengecualian YSOD Sebagai Lampiran
(Klik untuk melihat gambar ukuran penuh)
Bagaimana Dengan Menggunakan Halaman Kesalahan Kustom?
Tutorial ini menunjukkan cara menggunakan Global.asax
dan Application_Error
penanganan aktivitas untuk menjalankan kode ketika pengecualian yang tidak tertangani terjadi. Secara khusus, kami menggunakan penanganan aktivitas ini untuk memberi tahu pengembang tentang kesalahan; kita dapat memperluasnya untuk juga mencatat detail kesalahan dalam database. Kehadiran Application_Error
penanganan aktivitas tidak memengaruhi pengalaman pengguna akhir. Mereka masih melihat halaman kesalahan yang dikonfigurasi, baik itu YSOD Detail Kesalahan, Kesalahan Runtime YSOD, atau halaman kesalahan kustom.
Wajar jika bertanya-tanya apakah Global.asax
file dan Application_Error
peristiwa diperlukan saat menggunakan halaman kesalahan kustom. Ketika kesalahan terjadi, pengguna ditampilkan halaman kesalahan kustom sehingga mengapa kami tidak dapat menempatkan kode untuk memberi tahu pengembang dan mencatat detail kesalahan ke kelas kode di belakang halaman kesalahan kustom? Meskipun Anda pasti dapat menambahkan kode ke kelas code-behind halaman kesalahan kustom, Anda tidak memiliki akses ke detail pengecualian yang memicu Error
peristiwa saat menggunakan teknik yang kami jelajahi dalam tutorial sebelumnya. Memanggil GetLastError
metode dari halaman kesalahan kustom mengembalikan Nothing
.
Alasan untuk perilaku ini adalah karena halaman kesalahan kustom tercapai melalui pengalihan. Ketika pengecualian yang tidak tertangani mencapai runtime ASP.NET, mesin ASP.NET menaikkan peristiwanya Error
(yang menjalankan Application_Error
penanganan aktivitas) dan kemudian mengalihkan pengguna ke halaman kesalahan kustom dengan mengeluarkan Response.Redirect(customErrorPageUrl)
. Metode ini Response.Redirect
mengirim respons ke klien dengan kode status HTTP 302, menginstruksikan browser untuk meminta URL baru, yaitu halaman kesalahan kustom. Browser kemudian secara otomatis meminta halaman baru ini. Anda dapat mengetahui bahwa halaman kesalahan kustom diminta secara terpisah dari halaman tempat kesalahan berasal karena bilah Alamat browser berubah ke URL halaman kesalahan kustom (lihat Gambar 4).
Gambar 4: Ketika Terjadi Kesalahan Browser Dialihkan ke URL Halaman Kesalahan Kustom
(Klik untuk melihat gambar ukuran penuh)
Efek bersihnya adalah bahwa permintaan di mana pengecualian yang tidak tertangani terjadi berakhir ketika server merespons dengan pengalihan HTTP 302. Permintaan berikutnya ke halaman kesalahan kustom adalah permintaan baru; pada titik ini mesin ASP.NET telah membuang informasi kesalahan dan, selain itu, tidak memiliki cara untuk mengaitkan pengecualian yang tidak tertangani dalam permintaan sebelumnya dengan permintaan baru untuk halaman kesalahan kustom. Inilah sebabnya mengapa GetLastError
kembali null
ketika dipanggil dari halaman kesalahan kustom.
Namun, dimungkinkan untuk menjalankan halaman kesalahan kustom selama permintaan yang sama yang menyebabkan kesalahan. Metode mentransfer Server.Transfer(url)
eksekusi ke URL yang ditentukan dan memprosesnya dalam permintaan yang sama. Anda dapat memindahkan kode di Application_Error
penanganan aktivitas ke kelas code-behind halaman kesalahan kustom, menggantinya Global.asax
dengan kode berikut:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
If lastErrorWrapper.GetHttpCode() = 404 Then
Server.Transfer("~/ErrorPages/404.aspx")
Else
Server.Transfer("~/ErrorPages/Oops.aspx")
End If
End Sub
Sekarang ketika pengecualian yang tidak tertangani terjadi, Application_Error
penanganan aktivitas mentransfer kontrol ke halaman kesalahan kustom yang sesuai berdasarkan kode status HTTP. Karena kontrol ditransfer, halaman kesalahan kustom memiliki akses ke informasi pengecualian yang tidak tertangani melalui Server.GetLastError
dan dapat memberi tahu pengembang tentang kesalahan dan mencatat detailnya. Panggilan Server.Transfer
menghentikan mesin ASP.NET mengalihkan pengguna ke halaman kesalahan kustom. Sebagai gantinya, konten halaman kesalahan kustom dikembalikan sebagai respons terhadap halaman yang menghasilkan kesalahan.
Ringkasan
Ketika pengecualian yang tidak tertangani terjadi di aplikasi web ASP.NET, runtime ASP.NET meningkatkan Error
peristiwa dan menampilkan halaman kesalahan yang dikonfigurasi. Kami dapat memberi tahu pengembang tentang kesalahan, mencatat detailnya, atau memprosesnya dengan cara lain, dengan membuat penanganan aktivitas untuk peristiwa Kesalahan. Ada dua cara untuk membuat penanganan aktivitas untuk HttpApplication
peristiwa seperti Error
: dalam Global.asax
file atau dari Modul HTTP. Tutorial ini menunjukkan cara membuat Error
penanganan aktivitas dalam Global.asax
file yang memberi tahu pengembang tentang kesalahan melalui pesan email.
Error
Membuat penanganan aktivitas berguna jika Anda perlu memproses pengecualian yang tidak tertangani dengan cara yang unik atau disesuaikan. Namun, membuat penanganan aktivitas Anda sendiri Error
untuk mencatat pengecualian atau memberi tahu pengembang bukanlah penggunaan waktu Anda yang paling efisien karena sudah ada pustaka pengelogan kesalahan gratis dan mudah digunakan yang dapat disiapkan dalam hitungan menit. Dua tutorial berikutnya memeriksa dua pustaka tersebut.
Selamat Pemrograman!
Bacaan lebih lanjut
Untuk informasi selengkapnya tentang topik yang dibahas dalam tutorial ini, lihat sumber daya berikut:
- ASP.NET Modul HTTP dan Gambaran Umum Penangan HTTP
- Menanggapi Pengecualian yang Tidak Tertangani dengan Anggun - Memproses Pengecualian yang Tidak Tertangani
HttpApplication
Kelas dan Objek Aplikasi ASP.NET- Handler HTTP dan Modul HTTP di ASP.NET
- Mengirim Email di ASP.NET
- Memahami
Global.asax
File - Menggunakan Modul dan Handler HTTP untuk Membuat Komponen ASP.NET yang Dapat Dicolokkan
- Bekerja dengan File ASP.NET
Global.asax
- Bekerja dengan
HttpApplication
Instans