Asp.net core ASP.NET Core rc2中的全局异常处理在没有异常过滤器的情况下工作

Asp.net core ASP.NET Core rc2中的全局异常处理在没有异常过滤器的情况下工作,asp.net-core,asp.net-core-1.0,Asp.net Core,Asp.net Core 1.0,我只注册了这样的数据库记录器: loggerFactory.AddDatabaseLogger(logRepository,serviceProvider,LogLevel.Error); 然后,我所有未处理的错误都被记录到数据库中。 当我添加自定义错误过滤器时,所有未处理的错误都会记录两次 services.AddMvc(config => { config.Filters.Add(new CustomExceptionFilter(_l

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

   loggerFactory.AddDatabaseLogger(logRepository,serviceProvider,LogLevel.Error);
然后,我所有未处理的错误都被记录到数据库中。 当我添加自定义错误过滤器时,所有未处理的错误都会记录两次

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

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

异常过滤器是MVC的概念,因为即使在MVC之外也可能发生未处理的异常,所以仅使用ExceptionFilter可能是不够的

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

var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var exception = exceptionHandlerFeature.Error;
var exceptionHandlerFeature=HttpContext.Features.Get();
var exception=exceptionHandlerFeature.Error;
另一方面,如果要编写异常筛选器,则应在异常筛选器中执行以下操作,以停止再次传播异常。这可能是您看到日志条目两次的原因


exceptionContext.ExceptionHandled=true

哪个包包含AddDatabaseLogger方法的定义?@Set我在那里创建了EntityFramework logger的自定义实现。在这个项目中类似的东西。我不明白的是ASP.NET 5 RC2如何自动记录未处理的异常。如果使用ASP核心诊断包,这是由ExceptionHandlerMiddleware实现的。通常,ASP.Core中的中间件是一个组件,组装到应用程序管道中以处理(所有/任何)请求和响应。我将在周一测试此exceptionContext.ExceptionHandled=true并通知您。我对中间件不太确定。我已经看到了这一点,但并不完全理解使用中间件记录异常的好处。使用中间件而不是ASP.NET MVC errorFilter可以捕获哪些异常?感谢您的帮助。新版本ASP.NET Core RC2没有exceptionContext.ExceptionHandled=true或任何类似内容。不确定如何解决此问题。若要使错误不被传播,必须使用上下文。异常=null;但是,您需要这样形成错误结果页面:MediaTypeCollection MediaTypeCollection=new MediaTypeCollection{new MediaTypeHeaderValue(“text/html”)};context.Result=new ObjectResult(“\r\n发生内部错误。很抱歉,您的应用程序遇到了意外问题。\r\n”){StatusCode=500,ContentTypes=mediaTypeCollection};