ASP.NET Core rc2中的全局异常处理无异常过滤器

时间:2016-06-17 13:29:27

标签: asp.net-core asp.net-core-1.0

我只注册了这样的数据库记录器:

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

之后,我所有未处理的错误都会记录到数据库中。 当我添加自定义错误过滤器时,所有未处理的错误都会被记录两次。

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

最新版本的ASP.NET 5 RC2是否不需要创建自定义全局异常过滤器?

1 个答案:

答案 0 :(得分:4)

异常过滤器是MVC概念,因为即使在MVC之外也可能发生未处理的异常,只有使用ExceptionFilters可能还不够。

如果您想在一个中心位置处理所有未处理的异常,我认为您可以使用ExceptionHandlerMiddleware。该中间件可以选择执行控制器的操作。示例:app.UseExceptionHandler(errorHandlingPath: "/Home/Error");Error操作中,您可以记录异常详细信息。您可以通过执行以下操作来检索异常详细信息:

var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var exception = exceptionHandlerFeature.Error;

另外,如果您正在编写异常过滤器,则应在异常过滤器中执行以下操作以停止再次传播异常。可能这就是你两次看到日志条目的原因。

exceptionContext.ExceptionHandled = true;