Глобальная обработка исключений в ASP.NET ядро rc2 работает без фильтра исключений


У меня есть только регистратор базы данных, как это:

   loggerFactory.AddDatabaseLogger(logRepository,serviceProvider,LogLevel.Error);

И после этого все мои необработанные ошибки регистрируются в базе данных. Когда я добавляю свой пользовательский фильтр ошибок, все необработанные ошибки регистрируются дважды.

 services.AddMvc(config =>
        {
            config.Filters.Add(new CustomExceptionFilter(_loggerFactory));
        });

Создает пользовательский глобальный фильтр исключений ненужный с последней версией ASP.NET 5 RC2?

1 4

1 ответ:

Фильтры исключений - это концепция MVC, и поскольку необработанные исключения могут возникать даже за пределами MVC, одного использования ExceptionFilters может быть недостаточно.

Если вы хотите обрабатывать все необработанные исключения в одном центральном месте, я думаю, что вы могли бы использовать ExceptionHandlerMiddleware. Это промежуточное программное обеспечение имеет возможность выполнения действия контроллера. Пример: app.UseExceptionHandler(errorHandlingPath: "/Home/Error"); В действии Error можно записать сведения об исключении. Вы можете получить сведения об исключении, выполнив следующие действия:
var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var exception = exceptionHandlerFeature.Error;

На боковой ноте, если вы пишете фильтры исключений, вы должны сделать следующее в фильтре исключений, чтобы остановить распространение исключения снова. Вероятно, именно по этой причине вы видите записи журнала дважды.

exceptionContext.ExceptionHandled = true;