结合使用“ UseDeveloperExceptionPage”和“ UseExceptionHandler”

时间:2019-02-22 11:21:56

标签: c# asp.net-core

当有未处理的异常时,我想显示开发人员异常页面,但我也想添加日志记录。但是,当我将app.UseDeveloperExceptionPageapp.UseExceptionHandler一起使用时,只有我添加的最后一个有效。我如何才能使两者一起工作?

2 个答案:

答案 0 :(得分:1)

默认ExceptionHandler不适用于DeveloperExceptionPage,因为它捕获了Exception。
您可以做的是添加一个ExceptionFilter,记录该异常,并让它被DeveloperExceptionPage捕获:

public class ExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        Log.Error(context.Exception, $"{context.ActionDescriptor.DisplayName}");

        // the important bit here
        context.ExceptionHandled = false;
    }
}

然后将其添加到过滤器中:

services.AddMvc(setup => { /* ... */ setup.Filters.Add<ExceptionFilter>(); });

答案 1 :(得分:1)

您无需将逻辑移至异常过滤器。

您可以简单地重新抛出从您使用过的IExceptionHandlerFeatureIExceptionHandlerFeature / IExceptionHandlerPathFeature)中收到的异常

例如:

var exceptionFeature = context.Features.Get<IExceptionHandlerFeature>();
throw exceptionFeature.Error;

然后,您的DeveloperExceptionPage将在管道中捕获异常。