当有未处理的异常时,我想显示开发人员异常页面,但我也想添加日志记录。但是,当我将app.UseDeveloperExceptionPage
与app.UseExceptionHandler
一起使用时,只有我添加的最后一个有效。我如何才能使两者一起工作?
答案 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)
您无需将逻辑移至异常过滤器。
您可以简单地重新抛出从您使用过的IExceptionHandlerFeature
(IExceptionHandlerFeature
/ IExceptionHandlerPathFeature
)中收到的异常
例如:
var exceptionFeature = context.Features.Get<IExceptionHandlerFeature>();
throw exceptionFeature.Error;
然后,您的DeveloperExceptionPage将在管道中捕获异常。