MVC Framework - Özel Durum İşleme
ASP.NET'te hata işleme, standart try catch yaklaşımı veya uygulama olayları kullanılarak yapılır. ASP.NET MVC, özel durum filtreleri olarak bilinen bir özelliği kullanarak özel durum işleme için yerleşik destekle birlikte gelir. Burada iki yaklaşım öğreneceğiz: biri onException yöntemini geçersiz kılarak ve diğeri HandleError filtrelerini tanımlayarak.
OnException Yöntemini Geçersiz Kıl
Bu yaklaşım, denetleyici düzeyinde Eylem yöntemlerindeki tüm istisnaları ele almak istediğimizde kullanılır.
Bu yaklaşımı anlamak için bir MVC uygulaması oluşturun (önceki bölümlerde anlatılan adımları izleyin). Şimdi yeni bir Controller sınıfı ekleyin ve onException yöntemini geçersiz kılan ve Action yöntemimizde açıkça bir hata atan aşağıdaki kodu ekleyin -
Şimdi adlı ortak bir Görünüm oluşturalım. Erroruygulamada herhangi bir istisna meydana geldiğinde kullanıcıya gösterilecektir. Görünümler klasörünün içinde, Paylaşılan adlı yeni bir klasör oluşturun ve Hata adlı yeni bir Görünüm ekleyin.
Aşağıdaki kodu yeni oluşturulan Error.cshtml'nin içine kopyalayın -
Uygulamayı şimdi çalıştırmayı denerseniz, aşağıdaki sonucu verecektir. Yukarıdaki kod, bu denetleyicideki eylem yöntemlerinden herhangi birinde herhangi bir istisna meydana geldiğinde Hata Görünümünü oluşturur.
Bu yaklaşımın avantajı, aynı denetleyicideki birden çok eylemin bu hata işleme mantığını paylaşabilmesidir. Bununla birlikte, dezavantajı, aynı hata işleme mantığını birden çok denetleyicide kullanamayacağımızdır.
HandleError Özniteliği
HandleError Özniteliği, Filtreler ve Eylem Filtreleri bölümünde incelediğimiz eylem filtrelerinden biridir. HandleErrorAttribute, IExceptionFilter'ın varsayılan uygulamasıdır. Bu filtre, denetleyici eylemleri, filtreleri ve görünümleri tarafından ortaya çıkan tüm istisnaları işler.
Bu özelliği kullanmak için öncelikle web.config dosyasındaki customErrors bölümünü açın. Web.config dosyasını açın ve aşağıdaki kodu system.web içine yerleştirin ve değerini On olarak ayarlayın.
<customErrors mode = "On"/>
Görünümler altında Paylaşılan klasörün içinde oluşturulmuş Hata Görünümüne zaten sahibiz. Bu kez, bu View dosyasının kodunu, HandleErrorInfo modeliyle (System.Web.MVC altında bulunan) güçlü bir şekilde yazmak için aşağıdaki şekilde değiştirin.
@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>
Şimdi, Denetleyici dosyasında [HandleError] niteliğini belirten aşağıdaki kodu denetleyici dosyanıza yerleştirin.
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();
}
}
}
Uygulamayı şimdi çalıştırmayı denerseniz, aşağıdaki ekran görüntüsünde gösterilene benzer bir hata alırsınız.
Gördüğünüz gibi, bu sefer hata, Denetleyici ve İşlemle ilgili ayrıntılar hakkında daha fazla bilgi içerir. Bu şekilde, HandleError herhangi bir düzeyde ve denetleyiciler arasında bu tür hataları işlemek için kullanılabilir.