Глобальная обработка исключений в ASP.NET ядро rc2 работает без фильтра исключений
У меня есть только регистратор базы данных, как это:
loggerFactory.AddDatabaseLogger(logRepository,serviceProvider,LogLevel.Error);
И после этого все мои необработанные ошибки регистрируются в базе данных. Когда я добавляю свой пользовательский фильтр ошибок, все необработанные ошибки регистрируются дважды.
services.AddMvc(config =>
{
config.Filters.Add(new CustomExceptionFilter(_loggerFactory));
});
Создает пользовательский глобальный фильтр исключений ненужный с последней версией ASP.NET 5 RC2?
1 ответ:
Фильтры исключений - это концепция MVC, и поскольку необработанные исключения могут возникать даже за пределами MVC, одного использования ExceptionFilters может быть недостаточно.
Если вы хотите обрабатывать все необработанные исключения в одном центральном месте, я думаю, что вы могли бы использоватьExceptionHandlerMiddleware
. Это промежуточное программное обеспечение имеет возможность выполнения действия контроллера. Пример:app.UseExceptionHandler(errorHandlingPath: "/Home/Error");
В действииError
можно записать сведения об исключении. Вы можете получить сведения об исключении, выполнив следующие действия:var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>(); var exception = exceptionHandlerFeature.Error;
На боковой ноте, если вы пишете фильтры исключений, вы должны сделать следующее в фильтре исключений, чтобы остановить распространение исключения снова. Вероятно, именно по этой причине вы видите записи журнала дважды.
exceptionContext.ExceptionHandled = true;