Mvc’de Exception Handling(Hata Yakalama)

Hakan Topuz
2 min readJun 27, 2019

--

Merhabalar,

Bu yazımda exception handling konusuna değineceğim.Hata yakalamanın best practice’i nedir? Kullanıcıya hata bazlı özel sayfalara yönlendirmek gerektiğinde ne yapmalıyız, oluşan tüm hataları loglamak için ne yapmalıyız bunlara bir bakalım.Hata yönetimi konusu özellikle büyük çaplı projelerde çok önemli bir konudur.

Hata yakalamanın aslında temel anlamda iki amacı vardır:

Birincisi; hatayı başarılı bir şekilde yakaladıktan sonra kullanıcıya, hatanın kendisinden ziyade uygun bir hata mesajı göstermek.

İkincisi; oluşan bu hataları loglayıp, monitör ederek farkına varmak ve düzeltmek.

Mvc’de bu işin best practice yöntemleri şunlardır;

  1. Web.Config’de global hata sayfaları tanımlamak:

Web.config’te oluşacak hatalar için, hata oluştuktan sonra yönlendirilecek hata sayfaları tanımlanabilir.Böylelikle kullanıcılar, .Net in klasik hata sayfaları ile karşılaşmazlar.

Örnekte görüldüğü üzere oluşan hata kodlarına göre özel olarak hata sayfaları da tanımlanabilir.(404,500 gibi.)

2. HandleErrorAttribute kullanmak:

HandleErrorAttribute, FilterAttribute’ten türetilmiş bir sınıftır ve bütün actionlarda kullanılabilir.

HandleErrorAttribute, oluşan hatanın tipine göre özel hata sayfalarına yönlendirme yapabilmemizi sağlar.

Örneğin; SqlException, DivideByZeroException tiplerinde oluşacak hatalar için, kullanıcılarıözel hata sayfalarına yönlendirmek istersek bu attribute ü kullanırız.

HandleErrorAttribute’ün, en büyük handikapı, hatayı loglamak için bir yöntem sunmamasıdır.

Bu attribute’ü kullanabilmek için web.config’te customErrors aktif hale getirilmelidir.

3. OnException metodunu Override etmek:

Controller’ın OnException metodunu override ederek, oluşan hataları yakalayabilir ve kullanıcıya ilgili hata sayfasına yönlendirebiliriz.

Bu yöntemde görüldüğü üzere kolaylıkla hatayı loglama işlemini de gerçekleştirebiliriz.Parametre olarak aldığı ExceptionContext nesnesi, aktif hata ile alakalı bilgileri vererek loglama yapabilmemizi sağlar.

Ayrıca bu yöntem için web.config’te ki customErrors u aktif hale getirmeniz gerekmez.

4. Global.asax’ta Application_Error metodunu kullanmak:

Herhangi bir hata sayfasına vesaire yönlendirme yapmadan, handle etmeye gerek duymadığınız tüm hataları loglamak istersek bu yöntemi kullanabiliriz.

5. Try-Catch bloğunu kullanmak:

Metod bazlı hata yönetimi yapmak istediğimiz durumda, oluşan hatayı yakalamak istediğimiz kod bloğunu try-catch bloğu içine alabiliriz.

Bu yöntemle yine hem loglama yapabilir, hemde kullanıcıyı metod bazında özel mesaj gösterebilir veya sayfaya yönlendirebiliriz.

Son olarak; MVC’de exception handling için birkaç yöntemi görmüş olduk.Hata yönetimi için, web.config’te customErrors taginde tanımlı default bir hata sayfanız olmalı ve global.asax’ta Application_Error kısmında handle edilmeyen hataları loglamalısınız.

Kullanıcıya oluşan hatanın tipine göre özel bir mesaj veya sayfa göstemek isterseniz HandleError attribute’ünü veya Controller’ın OnException metodunu override ederek kullanabilirsiniz.Aradaki farktan bahsetmiştik ki; OnException metodu loglama yapabilme imkanı sağlıyordu.

Kısacası, projenizde ihtiyacınıza göre bu hata yakalama yöntemlerini ayrı ayrı kullanabilirsiniz.

Not: Web.config’te customErrors’u aktif etmek için;

<system.web> taginin altına <customErrors mode=”On” ></customErrors> eklenir.

Umarım faydalı bir yazı olmuştur.Herkese mutlu ve az hatalı kodlamalar !

Kaynak:

--

--