ASP.NET 核心 rc2 中的全局异常处理没有异常过滤器
Global Exception Handling in ASP.NET Core rc2 works without exception filter
我只注册过这样的数据库记录器:
loggerFactory.AddDatabaseLogger(logRepository,serviceProvider,LogLevel.Error);
然后我所有未处理的错误都记录到数据库中。
当我添加我的自定义错误过滤器时,所有未处理的错误都会被记录两次。
services.AddMvc(config =>
{
config.Filters.Add(new CustomExceptionFilter(_loggerFactory));
});
最新版本的 ASP.NET 5 RC2 是否不需要创建自定义全局异常过滤器?
异常过滤器是 MVC 概念,由于未处理的异常甚至可能发生在 MVC 之外,因此仅使用 ExceptionFilters 可能不够。
如果你想在一个集中处理所有未处理的异常,我想你可以使用 ExceptionHandlerMiddleware
。该中间件可以选择执行控制器的操作。示例:app.UseExceptionHandler(errorHandlingPath: "/Home/Error");
在 Error
操作中,您可以记录异常详细信息。您可以通过执行以下操作来检索异常详细信息:
var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var exception = exceptionHandlerFeature.Error;
附带说明一下,如果您正在编写异常过滤器,则应在异常过滤器中执行以下操作以停止再次传播异常。可能这就是您两次看到日志条目的原因。
exceptionContext.ExceptionHandled = true;
我只注册过这样的数据库记录器:
loggerFactory.AddDatabaseLogger(logRepository,serviceProvider,LogLevel.Error);
然后我所有未处理的错误都记录到数据库中。 当我添加我的自定义错误过滤器时,所有未处理的错误都会被记录两次。
services.AddMvc(config =>
{
config.Filters.Add(new CustomExceptionFilter(_loggerFactory));
});
最新版本的 ASP.NET 5 RC2 是否不需要创建自定义全局异常过滤器?
异常过滤器是 MVC 概念,由于未处理的异常甚至可能发生在 MVC 之外,因此仅使用 ExceptionFilters 可能不够。
如果你想在一个集中处理所有未处理的异常,我想你可以使用 ExceptionHandlerMiddleware
。该中间件可以选择执行控制器的操作。示例:app.UseExceptionHandler(errorHandlingPath: "/Home/Error");
在 Error
操作中,您可以记录异常详细信息。您可以通过执行以下操作来检索异常详细信息:
var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var exception = exceptionHandlerFeature.Error;
附带说明一下,如果您正在编写异常过滤器,则应在异常过滤器中执行以下操作以停止再次传播异常。可能这就是您两次看到日志条目的原因。
exceptionContext.ExceptionHandled = true;