在我的项目中,我想记录数据库表中应用程序中发生的所有错误。我使用try catch块捕获几乎所有错误,但我无法捕获像4xx和5xx这样的全局错误。
在某些情况下,应用程序不会重定向到Startup.cs的Configure方法中定义的异常处理程序,就像我键入不存在的URL一样。
app.UseExceptionHandler("/Error");
有没有办法捕获我的应用程序中发生的所有未处理的错误?
答案 0 :(得分:3)
您可以创建自己的异常过滤器,它实现IExceptionFilter
例如:
public class GlobalExceptionFilter : IExceptionFilter
{
ILogger<GlobalExceptionFilter> logger = null;
public GlobalExceptionFilter(ILogger<GlobalExceptionFilter> exceptionLogger)
{
logger = exceptionLogger;
}
public void OnException(ExceptionContext context)
{
// log the exception
logger.LogError(0, context.Exception.GetBaseException(), "Exception occurred.");
}
}
然后,您可以在ConfigureServices
方法中添加此过滤器,如下所示:
services.AddMvc(o => { o.Filters.Add<GlobalExceptionFilter>(); });
这将捕获由于请求而发生的任何未公开的异常。对于404s,您可以将以下内容添加到Configure
方法中:
app.UseStatusCodePagesWithReExecute("/error/{0}");
然后,您可以在ErrorController
。