Каждый раз, при создании нового проекта, приходится проделывать ряд одних и тех же определенных шагов. И вполне естественно, что хочется минимизировать их количество. Давайте посмотрим как можно упросить процесс обработки ошибок и показа сообщений о них.
Что должно происходить при ошибке в веб-приложении? Необходимо занести информацию о ней в журнал, уведомить администратора сайта, а посетителю показать понятную ему страницу с извинениями.
Как сделать описанное выше наверное знают многие. Но не писать же каждый раз один и тот же код? Поэтому воспользуемся библиотекой Moveax.Mvc.ErrorHandler, которая позволяет легко добавлять страницы с сообщениями об ошибках.
Установка
Для её установки выполним в консоли NuGet следующую команду:
PM> Install-Package Moveax.Mvc.ErrorHandler
По завершению в проект будут добавлены Контроллер ErrorController и два Представления:
- Http404 – страница для сообщения о несуществующем пути;
- Default – страница по-умолчанию, для всех ошибок у которых нет отдельных Представлений.
Разумеется, в дальнейшем их можно изменить, как того потребует дизайн веб-приложения.
Для завершения установки необходимо в global.asax.cs добавить код для перехвата исключений:
protected void Application_Error(object sender, System.EventArgs e)
{
var errorHandler = new MvcApplicationErrorHandler(application: this, exception: this.Server.GetLastError()) {
EnableHttpReturnCodes = false,
PassThroughHttp401 = false
};
errorHandler.Execute();
}
Поведение обработчика ошибок MvcApplicationErrorHandler можно настроить с помощью двух свойств:
- EnableHttpReturnCodes – определяет будет ли клиенту возвращаться код ошибки (true), или просто страница с уведомлением (false);
- PassThroughHttp401 – указывает на необходимость игнорировать ошибку HTTP 401, если в приложении предусмотрена отдельная схема для её обработки.
Настройка
При возникновении внештатной ситуации, логика работы ErrorController следующая:
- каждый раз вызывается метод HandleError(), в которые передается описание ошибки. Здесь можно вставить код, например, ведения журнала;
- вызывается Действие с именем "Http[код ошибки]" (например, Http404);
- если такого Действия нет, то используется Действие Default.
Как легко понять, для добавления отдельной страницы с сообщением для конкретной ошибки, достаточно создать Действие и Представление с именем в формате "Http"+[код ошибки]. Пример можно увидеть в самом ErrorController:
public ActionResult Http404(ErrorDescription errorDescription)
{
return this.View();
}
Класс ErrorDescription содержит информацию об возникшей ошибке:
public class ErrorDescription
{
public int HttpCode { get; }
public Exception Exception { get; }
public HttpRequest Request { get; }
}
Таким образом, библиотека Moveax.Mvc.ErrorHandler позволяет свести всю работу к добавлению Действий и вызову методов ведения журнала.
Обратная связь
Вопросы, советы, предложения принимаются по почте или на сайте проекта.