常过滤器(Exception Filters)是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。
异常过滤器的使用步骤如下:
-
创建一个异常过滤器类:首先,创建一个实现了
IExceptionFilter
接口的异常过滤器类。该接口包含一个OnException
方法,用于处理发生的异常。 -
在 Startup.cs 中注册异常过滤器:在 ASP.NET Core 的
Startup.cs
文件中的ConfigureServices
方法中注册异常过滤器。 -
在异常过滤器中处理异常:在异常过滤器的
OnException
方法中编写处理异常的逻辑。你可以在此方法中记录日志、发送通知、返回自定义错误页面等。
下面是一个简单的异常过滤器的示例:
- 创建异常过滤器类:
csharpCopy code
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging;
public class CustomExceptionFilter : IExceptionFilter
{
private readonly ILogger<CustomExceptionFilter> _logger;
public CustomExceptionFilter(ILogger<CustomExceptionFilter> logger) {
_logger = logger;
}
public void OnException(ExceptionContext context) {
// 处理异常逻辑,这里示例只记录异常信息到日志
_logger.LogError(context.Exception, "发生了一个未处理的异常:");
}
}
- 注册异常过滤器:
在 Startup.cs
文件中的 ConfigureServices
方法中注册异常过滤器:
csharpCopy code
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
// 省略其他代码...
public void ConfigureServices(IServiceCollection services) {
// 注册自定义异常过滤器
services.AddControllers(options => {
options.Filters.Add<CustomExceptionFilter>();
});
}
// 省略其他代码...
}
现在,当应用程序中的任何控制器或动作方法发生未处理的异常时,异常过滤器将捕获该异常,并执行 OnException
方法中定义的自定义逻辑。在此示例中,它会记录异常信息到日志。
请注意,异常过滤器是在控制器动作方法执行期间发生的异常处理机制。如果异常是在请求管道的早期(如中间件或身份验证过程)抛出的,则可能无法通过异常过滤器来捕获处理。在这种情况下,可以使用 ASP.NET Core 的其他异常处理机制,如中间件、异常中间件或全局异常处理器。