MVC Framework - Penanganan Pengecualian

Dalam ASP.NET, penanganan kesalahan dilakukan dengan menggunakan pendekatan coba tangkap standar atau menggunakan peristiwa aplikasi. ASP.NET MVC hadir dengan dukungan built-in untuk penanganan pengecualian menggunakan fitur yang dikenal sebagai filter pengecualian. Kita akan mempelajari dua pendekatan di sini: satu dengan mengganti metode onException dan yang lainnya dengan mendefinisikan filter HandleError.

Ganti Metode OnException

Pendekatan ini digunakan saat kita ingin menangani semua pengecualian di seluruh metode Tindakan pada tingkat pengontrol.

Untuk memahami pendekatan ini, buat aplikasi MVC (ikuti langkah-langkah yang dibahas di bab sebelumnya). Sekarang tambahkan kelas Controller baru dan tambahkan kode berikut yang menggantikan metode onException dan secara eksplisit melempar kesalahan dalam metode Action kami -

Sekarang mari kita buat View umum bernama Erroryang akan ditampilkan kepada pengguna bila ada pengecualian yang terjadi dalam aplikasi. Di dalam folder Views, buat folder baru bernama Shared dan tambahkan View baru bernama Error.

Salin kode berikut di dalam Error.cshtml yang baru dibuat -

Jika Anda mencoba menjalankan aplikasi sekarang, itu akan memberikan hasil sebagai berikut. Kode di atas membuat Tampilan Kesalahan ketika pengecualian apa pun terjadi di salah satu metode tindakan dalam pengontrol ini.

Keuntungan dari pendekatan ini adalah bahwa beberapa tindakan dalam pengontrol yang sama dapat berbagi logika penanganan kesalahan ini. Namun, kerugiannya adalah kita tidak dapat menggunakan logika penanganan kesalahan yang sama di beberapa pengontrol.

HandleError Attribute

Atribut HandleError adalah salah satu filter tindakan yang kita pelajari di bab Filter dan Filter Tindakan. HandleErrorAttribute adalah implementasi default IExceptionFilter. Filter ini menangani semua pengecualian yang dimunculkan oleh tindakan pengontrol, filter, dan tampilan.

Untuk menggunakan fitur ini, pertama-tama aktifkan bagian customErrors di web.config. Buka web.config dan tempatkan kode berikut di dalam system.web dan atur nilainya sebagai On.

<customErrors mode = "On"/>

Kami sudah membuat Tampilan Kesalahan di dalam folder Bersama di bawah Tampilan. Kali ini ubah kode file View ini ke yang berikut, ketikkan dengan model HandleErrorInfo (yang ada di System.Web.MVC).

@model System.Web.Mvc.HandleErrorInfo 

@{ 
Layout = null; 
} 
  
<!DOCTYPE html> 
<html> 
   <head> 
      <meta name = "viewport" content = "width = device-width" /> 
      <title>Error</title> 
   </head> 
   
   <body> 
      <h2> 
         Sorry, an error occurred while processing your request.  
      </h2> 
      <h2>Exception details</h2> 
      
      <p> 
         Controller: @Model.ControllerName <br> 
         Action: @Model.ActionName 
         Exception: @Model.Exception 
      </p> 
   
   </body> 
</html>

Sekarang tempatkan kode berikut di file controller Anda yang menentukan atribut [HandleError] pada file Controller.

using System; 
using System.Data.Common; 
using System.Web.Mvc;  

namespace ExceptionHandlingMVC.Controllers { 
   [HandleError] 
   public class ExceptionHandlingController : Controller { 
      
      public ActionResult TestMethod() { 
         throw new Exception("Test Exception"); 
         return View(); 
      } 
   } 
}

Jika Anda mencoba menjalankan aplikasi sekarang, Anda akan mendapatkan kesalahan seperti yang ditunjukkan pada tangkapan layar berikut.

Seperti yang Anda lihat, kali ini kesalahan berisi informasi lebih lanjut tentang detail terkait Pengontrol dan Tindakan. Dengan cara ini, HandleError dapat digunakan di semua tingkat dan di seluruh pengontrol untuk menangani kesalahan tersebut.