Bagikan melalui


Menampilkan Halaman Kesalahan Kustom (C#)

oleh Scott Mitchell

Apa yang dilihat pengguna saat kesalahan runtime terjadi di aplikasi web ASP.NET? Jawabannya tergantung pada bagaimana konfigurasi customErrors> situs web<. Secara default, pengguna ditampilkan layar kuning yang tidak sedap dipandang menyatakan bahwa kesalahan runtime telah terjadi. Tutorial ini menunjukkan cara menyesuaikan pengaturan ini untuk menampilkan halaman kesalahan kustom yang menyenangkan secara estetis yang cocok dengan tampilan dan nuansa situs Anda.

Pengantar

Di dunia yang sempurna tidak akan ada kesalahan run-time. Programmer akan menulis kode dengan nary bug dan dengan validasi input pengguna yang kuat, dan sumber daya eksternal seperti server database dan server email tidak akan pernah offline. Tentu saja, pada kenyataannya kesalahan tidak dapat dihindari. Kelas dalam .NET Framework memberi sinyal kesalahan dengan melemparkan pengecualian. Misalnya, memanggil metode Buka objek SqlConnection membuat koneksi ke database yang ditentukan oleh string koneksi. Namun, jika database tidak berfungsi atau jika kredensial dalam string koneksi tidak valid maka metode Buka melempar .SqlException Pengecualian dapat ditangani dengan penggunaan try/catch/finally blok. Jika kode dalam try blok melempar pengecualian, kontrol ditransfer ke blok tangkapan yang sesuai di mana pengembang dapat mencoba memulihkan dari kesalahan. Jika tidak ada blok tangkapan yang cocok, atau jika kode yang melemparkan pengecualian tidak berada di blok percobaan, pengecualian akan memperkolasi tumpukan panggilan untuk mencari try/catch/finally blok.

Jika pengecualian menggelembung hingga runtime ASP.NET tanpa ditangani, HttpApplication peristiwa kelasError dinaikkan dan halaman kesalahan yang dikonfigurasi ditampilkan. Secara default, ASP.NET menampilkan halaman kesalahan yang secara sayang disebut sebagai Layar Kuning Kematian (YSOD). Ada dua versi YSOD: satu menunjukkan detail pengecualian, jejak tumpukan, dan informasi lain yang berguna bagi pengembang yang menelusuri kesalahan aplikasi (lihat Gambar 1); yang lain hanya menyatakan bahwa ada kesalahan run-time (lihat Gambar 2).

Detail pengecualian YSOD cukup membantu pengembang men-debug aplikasi, tetapi menunjukkan YSOD kepada pengguna akhir norak dan tidak profesional. Sebagai gantinya, pengguna akhir harus dibawa ke halaman kesalahan yang mempertahankan tampilan dan nuansa situs dengan prose yang lebih ramah pengguna yang menjelaskan situasi. Kabar baiknya adalah bahwa membuat halaman kesalahan kustom seperti itu cukup mudah. Tutorial ini dimulai dengan melihat ASP. Halaman kesalahan NET yang berbeda. Kemudian menunjukkan cara mengonfigurasi aplikasi web untuk menampilkan halaman kesalahan kustom kepada pengguna dalam menghadapi kesalahan.

Memeriksa Tiga Jenis Halaman Kesalahan

Ketika pengecualian yang tidak tertangani muncul dalam aplikasi ASP.NET salah satu dari tiga jenis halaman kesalahan ditampilkan:

  • Halaman Detail Pengecualian Yellow Screen of Death error,
  • Layar Kuning Kesalahan Runtime halaman kesalahan Kematian, atau
  • Halaman kesalahan kustom

Pengembang halaman kesalahan yang paling akrab dengan adalah Detail Pengecualian YSOD. Secara default, halaman ini ditampilkan kepada pengguna yang mengunjungi secara lokal dan oleh karena itu adalah halaman yang Anda lihat ketika kesalahan terjadi saat menguji situs di lingkungan pengembangan. Seperti namanya, Detail Pengecualian YSOD memberikan detail tentang pengecualian - jenis, pesan, dan jejak tumpukan. Terlebih lagi, jika pengecualian dimunculkan oleh kode di kelas code-behind halaman ASP.NET Anda dan jika aplikasi dikonfigurasi untuk penelusuran kesalahan, Detail Pengecualian YSOD juga akan menampilkan baris kode ini (dan beberapa baris kode di atas dan di bawahnya).

Gambar 1 memperlihatkan halaman Detail Pengecualian YSOD. Perhatikan URL di jendela alamat browser: http://localhost:62275/Genre.aspx?ID=foo. Ingat bahwa halaman mencantumkan Genre.aspx ulasan buku dalam genre tertentu. Ini mengharuskan GenreId nilai (a uniqueidentifier) diteruskan melalui querystring; misalnya, URL yang sesuai untuk melihat ulasan fiksi adalah Genre.aspx?ID=7683ab5d-4589-4f03-a139-1c26044d0146. Jika non-nilaiuniqueidentifier diteruskan melalui querystring (seperti "foo") pengecualian akan dilemparkan.

Catatan

Untuk mereprodurasi kesalahan ini dalam aplikasi web demo yang tersedia untuk diunduh, Anda dapat mengunjungi Genre.aspx?ID=foo secara langsung atau mengklik tautan "Hasilkan Kesalahan Runtime" di Default.aspx.

Perhatikan informasi pengecualian yang disajikan dalam Gambar 1. Pesan pengecualian, "Konversi gagal saat mengonversi dari string karakter ke pengidentifikasi unik" ada di bagian atas halaman. Jenis pengecualian, System.Data.SqlClient.SqlException, juga tercantum. Ada juga jejak tumpukan.

Cuplikan layar yang memperlihatkan detail pengecualian YSOD yang menyertakan informasi tentang pengecualian.

Gambar 1: Detail Pengecualian YSOD Mencakup Informasi Tentang Pengecualian
(Klik untuk melihat gambar ukuran penuh)

Jenis YSOD lainnya adalah Runtime Error YSOD, dan ditunjukkan pada Gambar 2. Kesalahan Runtime YSOD memberi tahu pengunjung bahwa kesalahan run-time telah terjadi, tetapi tidak menyertakan informasi apa pun tentang pengecualian yang dilemparkan. (Namun, ini memberikan instruksi tentang cara membuat detail kesalahan dapat dilihat dengan memodifikasi Web.config file, yang merupakan bagian dari apa yang membuat YSOD terlihat tidak profesional.)

Secara default, Kesalahan Runtime YSOD ditunjukkan kepada pengguna yang mengunjungi dari jarak jauh (melalui http://www.yoursite.com), sebagaimana dibuktikan oleh URL di bilah Alamat browser di Gambar 2: http://httpruntime.web703.discountasp.net/Genre.aspx?ID=foo. Dua layar YSOD yang berbeda ada karena pengembang tertarik untuk mengetahui detail kesalahan, tetapi informasi tersebut tidak boleh ditampilkan di situs langsung karena dapat mengungkapkan potensi kerentanan keamanan atau informasi sensitif lainnya kepada siapa pun yang mengunjungi situs Anda.

Catatan

Jika Anda mengikuti dan menggunakan DiscountASP.NET sebagai host web Anda, Anda mungkin melihat bahwa Kesalahan Runtime YSOD tidak ditampilkan saat mengunjungi situs langsung. Ini karena DiscountASP.NET memiliki server mereka yang dikonfigurasi untuk menampilkan Detail Pengecualian YSOD secara default. Kabar baiknya adalah Anda dapat mengambil alih perilaku default ini dengan menambahkan <customErrors> bagian ke file Anda Web.config . Bagian "Mengonfigurasi Halaman Kesalahan Mana yang Ditampilkan" memeriksa bagian <customErrors> secara rinci.

Cuplikan layar yang memperlihatkan kesalahan runtime YSOD tidak menyertakan detail kesalahan apa pun.

Gambar 2: Kesalahan runtime YSOD tidak menyertakan detail kesalahan apa pun
(Klik untuk melihat gambar ukuran penuh)

Jenis halaman kesalahan ketiga adalah halaman kesalahan kustom, yang merupakan halaman web yang Anda buat. Manfaat dari halaman kesalahan kustom adalah Anda memiliki kontrol penuh atas informasi yang ditampilkan kepada pengguna bersama dengan tampilan dan nuansa halaman; halaman kesalahan kustom dapat menggunakan halaman master dan gaya yang sama dengan halaman Anda yang lain. Bagian "Menggunakan Halaman Kesalahan Kustom" menjelaskan pembuatan halaman kesalahan kustom dan mengonfigurasinya untuk ditampilkan jika terjadi pengecualian yang tidak tertangani. Gambar 3 menawarkan puncak dari halaman kesalahan kustom ini. Seperti yang Anda lihat, tampilan dan nuansa halaman kesalahan jauh lebih profesional daripada salah satu Layar Kuning Kematian yang ditunjukkan pada Gambar 1 dan 2.

Cuplikan layar yang memperlihatkan halaman kesalahan kustom yang menunjukkan tampilan dan nuansa yang lebih disesuaikan.

Gambar 3: Halaman Kesalahan Kustom Menawarkan Tampilan dan Nuansa yang Lebih Disesuaikan
(Klik untuk melihat gambar ukuran penuh)

Luangkan waktu sejenak untuk memeriksa bilah Alamat browser di Gambar 3. Perhatikan bahwa bilah Alamat memperlihatkan URL halaman kesalahan kustom (/ErrorPages/Oops.aspx). Pada Gambar 1 dan 2 Layar Kuning Kematian ditampilkan di halaman yang sama dengan asal kesalahan (Genre.aspx). Halaman kesalahan kustom diteruskan URL halaman tempat kesalahan terjadi melalui aspxerrorpath parameter querystring.

Mengonfigurasi Halaman Kesalahan Mana yang Ditampilkan

Manakah dari tiga halaman kesalahan yang mungkin ditampilkan didasarkan pada dua variabel:

  • Informasi konfigurasi di bagian <customErrors> , dan
  • Apakah pengguna mengunjungi situs secara lokal atau jarak jauh.

Bagian <customErrors> dalamWeb.config memiliki dua atribut yang memengaruhi halaman kesalahan apa yang ditampilkan: defaultRedirect dan mode. Atribut defaultRedirect bersifat opsional. Jika disediakan, ini menentukan URL halaman kesalahan kustom dan menunjukkan bahwa halaman kesalahan kustom harus ditampilkan alih-alih Kesalahan Runtime YSOD. Atribut mode diperlukan dan menerima salah satu dari tiga nilai: On, , Offatau RemoteOnly. Nilai-nilai ini memiliki perilaku berikut:

  • On - menunjukkan bahwa halaman kesalahan kustom atau Runtime Error YSOD ditampilkan kepada semua pengunjung, terlepas dari apakah mereka lokal atau jarak jauh.
  • Off - menentukan bahwa Detail Pengecualian YSOD ditampilkan kepada semua pengunjung, terlepas dari apakah mereka lokal atau jarak jauh.
  • RemoteOnly - menunjukkan bahwa halaman kesalahan kustom atau Kesalahan Runtime YSOD ditampilkan kepada pengunjung jarak jauh, sementara Detail Pengecualian YSOD ditampilkan kepada pengunjung lokal.

Kecuali Anda menentukan sebaliknya, ASP.NET bertindak seolah-olah Anda telah mengatur atribut mode ke RemoteOnly dan belum menentukan defaultRedirect nilai. Dengan kata lain, perilaku defaultnya adalah bahwa Detail Pengecualian YSOD ditampilkan kepada pengunjung lokal sementara Kesalahan Runtime YSOD ditampilkan kepada pengunjung jarak jauh. Anda dapat mengambil alih perilaku default ini dengan menambahkan <customErrors> bagian ke aplikasi web Anda Web.config file.

Menggunakan Halaman Kesalahan Kustom

Setiap aplikasi web harus memiliki halaman kesalahan kustom. Ini memberikan alternatif yang lebih profesional untuk Runtime Error YSOD, mudah untuk membuat, dan mengonfigurasi aplikasi untuk menggunakan halaman kesalahan kustom hanya membutuhkan beberapa saat. Langkah pertama adalah membuat halaman kesalahan kustom. Saya telah menambahkan folder baru ke aplikasi Ulasan Buku bernama ErrorPages dan ditambahkan ke halaman ASP.NET baru bernama Oops.aspx. Minta halaman menggunakan halaman master yang sama dengan halaman lainnya di situs Anda sehingga secara otomatis mewarisi tampilan dan nuansa yang sama.

Cuplikan layar yang menyoroti folder ErrorPages baru dan Oops terkait melakukan file s p x.

Gambar 4: Buat Halaman Kesalahan Kustom

Selanjutnya, luangkan beberapa menit untuk membuat konten untuk halaman kesalahan. Saya telah membuat halaman kesalahan kustom yang agak sederhana dengan pesan yang menunjukkan bahwa ada kesalahan yang tidak terduga dan tautan kembali ke beranda situs.

Cuplikan layar yang memperlihatkan halaman kesalahan kustom dan pesan terkait.

Gambar 5: Mendesain halaman kesalahan kustom Anda
(Klik untuk melihat gambar ukuran penuh)

Dengan halaman kesalahan selesai, konfigurasikan aplikasi web untuk menggunakan halaman kesalahan kustom sebagai pengganti Kesalahan Runtime YSOD. Ini dicapai dengan menentukan URL halaman kesalahan di atribut bagian <customErrors>defaultRedirect . Tambahkan markup berikut ke file aplikasi Web.config Anda:

<configuration>
    ...

    <system.web>
        <customErrors mode="RemoteOnly"
                      defaultRedirect="~/ErrorPages/Oops.aspx" />

        ...
    </system.web>
</configuration>

Markup di atas mengonfigurasi aplikasi untuk menampilkan Detail Pengecualian YSOD kepada pengguna yang mengunjungi secara lokal, sambil menggunakan halaman kesalahan kustom Oops.aspx untuk pengguna yang mengunjungi dari jarak jauh. Untuk melihat tindakan ini, sebarkan situs web Anda ke lingkungan produksi lalu kunjungi halaman Genre.aspx di situs langsung dengan nilai querystring yang tidak valid. Anda akan melihat halaman kesalahan kustom (lihat kembali Gambar 3).

Untuk memverifikasi bahwa halaman kesalahan kustom hanya ditampilkan kepada pengguna jarak jauh, kunjungi Genre.aspx halaman dengan querystring yang tidak valid dari lingkungan pengembangan. Anda masih akan melihat Detail Pengecualian YSOD (lihat kembali ke Gambar 1). RemoteOnly Pengaturan memastikan bahwa pengguna yang mengunjungi situs di lingkungan produksi melihat halaman kesalahan kustom saat pengembang yang bekerja secara lokal terus melihat detail pengecualian.

Memberi tahu Pengembang dan Detail Kesalahan Pengelogan

Kesalahan yang terjadi di lingkungan pengembangan disebabkan oleh pengembang yang duduk di komputernya. Dia ditunjukkan informasi pengecualian dalam Detail Pengecualian YSOD, dan dia tahu langkah apa yang dilakukannya ketika kesalahan terjadi. Tetapi ketika kesalahan terjadi pada produksi, pengembang tidak memiliki pengetahuan bahwa kesalahan terjadi kecuali pengguna akhir yang mengunjungi situs membutuhkan waktu untuk melaporkan kesalahan. Dan bahkan jika pengguna keluar dari caranya untuk memperingatkan tim pengembangan bahwa kesalahan terjadi, tanpa mengetahui jenis pengecualian, pesan, dan jejak tumpukan, mungkin sulit untuk mendiagnosis penyebab kesalahan, apalagi memperbaikinya.

Untuk alasan ini, sangat penting bahwa setiap kesalahan di lingkungan produksi dicatat ke beberapa penyimpanan persisten (seperti database) dan bahwa pengembang diberitahu tentang kesalahan ini. Halaman kesalahan kustom mungkin tampak seperti tempat yang baik untuk melakukan pengelogan dan pemberitahuan ini. Sayangnya, halaman kesalahan kustom tidak memiliki akses ke detail kesalahan dan oleh karena itu tidak dapat digunakan untuk mencatat informasi ini. Kabar baiknya adalah bahwa ada sejumlah cara untuk mencegat detail kesalahan dan untuk mencatatnya, dan tiga tutorial berikutnya menjelajahi topik ini secara lebih rinci.

Menggunakan Halaman Kesalahan Kustom yang Berbeda untuk Status Kesalahan HTTP yang Berbeda

Ketika pengecualian dilemparkan oleh halaman ASP.NET dan tidak ditangani, pengecualian berkaitan hingga runtime ASP.NET, yang menampilkan halaman kesalahan yang dikonfigurasi. Jika permintaan masuk ke mesin ASP.NET tetapi tidak dapat diproses karena alasan tertentu - mungkin file yang diminta tidak ditemukan atau izin Baca telah dinonaktifkan untuk file - maka mesin ASP.NET menaikkan HttpException. Pengecualian ini, seperti pengecualian yang dimunculkan dari halaman ASP.NET, gelembung hingga runtime, menyebabkan halaman kesalahan yang sesuai ditampilkan.

Apa artinya ini untuk aplikasi web dalam produksi adalah bahwa jika pengguna meminta halaman yang tidak ditemukan maka mereka akan melihat halaman kesalahan kustom. Gambar 6 menunjukkan contoh seperti itu. Karena permintaan adalah untuk halaman yang tidak ada (NoSuchPage.aspx), dilemparkan HttpException dan halaman kesalahan kustom ditampilkan (perhatikan referensi ke NoSuchPage.aspx dalam aspxerrorpath parameter querystring).

Cuplikan layar yang memperlihatkan bagaimana runtime A S P dot NET menampilkan halaman kesalahan yang dikonfigurasi.

Gambar 6: Runtime ASP.NET Menampilkan Halaman Kesalahan yang Dikonfigurasi Sebagai Respons terhadap Permintaan Yang Tidak Valid (Klik untuk melihat gambar ukuran penuh)

Secara default, semua jenis kesalahan menyebabkan halaman kesalahan kustom yang sama ditampilkan. Namun, Anda dapat menentukan halaman kesalahan kustom yang berbeda untuk kode status HTTP tertentu menggunakan <error> elemen anak-anak di dalam bagian .<customErrors> Misalnya, untuk memiliki halaman kesalahan berbeda yang ditampilkan jika halaman tidak menemukan kesalahan, yang memiliki kode status HTTP 404, perbarui <customErrors> bagian untuk menyertakan markup berikut:

<customErrors mode="RemoteOnly" defaultRedirect="~/ErrorPages/Oops.aspx">
    <error statusCode="404" redirect="~/ErrorPages/404.aspx" />
</customErrors>

Dengan perubahan ini di tempat, setiap kali pengguna yang mengunjungi dari jarak jauh meminta sumber daya ASP.NET yang tidak ada, mereka akan diarahkan ke 404.aspx halaman kesalahan kustom alih-alih Oops.aspx. Seperti yang diilustrasikan 404.aspxGambar 7, halaman dapat menyertakan pesan yang lebih spesifik daripada halaman kesalahan kustom umum.

Catatan

Lihat 404 Halaman Kesalahan, Sekali Lagi untuk panduan tentang membuat halaman kesalahan 404 yang efektif.

Cuplikan layar yang memperlihatkan halaman kesalahan 4 O 4 kustom.

Gambar 7: Halaman Kesalahan 404 Kustom Menampilkan Pesan yang Lebih Ditargetkan Daripada Oops.aspx
(Klik untuk melihat gambar ukuran penuh)

Karena Anda tahu bahwa 404.aspx halaman hanya tercapai ketika pengguna membuat permintaan untuk halaman yang tidak ditemukan, Anda dapat meningkatkan halaman kesalahan kustom ini untuk menyertakan fungsionalitas untuk membantu pengguna mengatasi jenis kesalahan khusus ini. Misalnya, Anda dapat membuat tabel database yang memetakan URL buruk yang diketahui ke URL yang baik, lalu meminta 404.aspx halaman kesalahan kustom menjalankan kueri terhadap tabel tersebut dan menyarankan halaman yang mungkin coba dijangkau pengguna.

Catatan

Halaman kesalahan kustom hanya ditampilkan saat permintaan dibuat ke sumber daya yang ditangani oleh mesin ASP.NET. Seperti yang kita bahas dalam tutorial Perbedaan Inti Antara IIS dan ASP.NET Development Server , server web dapat menangani permintaan tertentu itu sendiri. Secara default, server web IIS memproses permintaan untuk konten statis seperti gambar dan file HTML tanpa memanggil mesin ASP.NET. Akibatnya, jika pengguna meminta file gambar yang tidak ada, mereka akan mendapatkan kembali pesan kesalahan 404 default IIS daripada ASP. Halaman kesalahan net yang dikonfigurasi.

Ringkasan

Ketika pengecualian yang tidak tertangani terjadi dalam aplikasi ASP.NET, pengguna ditampilkan salah satu dari tiga halaman kesalahan: Layar Kuning Detail Pengecualian Kematian; Layar Kuning Kesalahan Runtime Kematian; atau halaman kesalahan kustom. Halaman kesalahan mana yang ditampilkan tergantung pada konfigurasi aplikasi <customErrors> dan apakah pengguna mengunjungi secara lokal atau jarak jauh. Perilaku defaultnya adalah menampilkan Detail Pengecualian YSOD kepada pengunjung lokal dan Kesalahan Runtime YSOD kepada pengunjung jarak jauh.

Sementara Kesalahan Runtime YSOD menyembunyikan informasi kesalahan yang berpotensi sensitif dari pengguna yang mengunjungi situs, itu rusak dari tampilan dan nuansa situs Anda dan membuat aplikasi Anda terlihat buggy. Pendekatan yang lebih baik adalah menggunakan halaman kesalahan kustom, yang memerlukan pembuatan dan desain halaman kesalahan kustom dan menentukan URL-nya defaultRedirect di <customErrors> atribut bagian. Anda bahkan dapat memiliki beberapa halaman kesalahan kustom untuk status kesalahan HTTP yang berbeda.

Halaman kesalahan kustom adalah langkah pertama dalam strategi penanganan kesalahan komprehensif untuk situs web dalam produksi. Memberi tahu pengembang tentang kesalahan dan mencatat detailnya juga merupakan langkah penting. Tiga tutorial berikutnya mengeksplorasi teknik untuk pemberitahuan kesalahan dan pengelogan.

Selamat Pemrograman!

Bacaan lebih lanjut

Untuk informasi selengkapnya tentang topik yang dibahas dalam tutorial ini, lihat sumber daya berikut: