Обработка исключений в ASP.NET MVC
Пусть есть MVC приложение. И мы хотим при возникновении исключений их обрабатывать, например, записывать в лог. Далее будет рассказано, как это можно сделать.
Класс Controller имеет виртуальный метод OnException который вызывается при возникновении исключений. Переопределив данный метод у себя в контроллере мы можем получать всю информацию, связанную с исключением и совершать какие-то действия в момент возникновения исключения в данном контроллере.
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
var exception = filterContext.Exception;
var httpContext = filterContext.HttpContext;
//Логика записи в лог
}
При таком способе нам нужно в каждом созданном контроллере переопределять метод OnException. Что не совсем красиво.
Для того чтобы централизованно обрабатывать исключения возникшие в любом контроллере, нужно сделать следующее.
Создать класс унаследованный от HandleErrorAttribute и переопределить в нем метод OnException, в котором следует поместить всю логику связанную с обработкой исключения:
public class HandleErrorsAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
var exception = filterContext.Exception;
var httpContext = filterContext.HttpContext;
//Логика записи в лог
}
}
Далее нужно добавить созданный класс, как атрибут ко всем имеющимся классам контроллеров.
[HandleErrors]
public class AccountController : Controller
{
...
После этого все исключения будут обрабатываться в одном месте.
arusland.blogspot.com
27.07.2009 10:35
Если есть возможность, всегда придерживаюсь (полу-)декларативных способов контроля управления программой. При этом меньше вероятности сделать ошибку.