一、什么是异常过滤器?
异常过滤器(Exception Filters)是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策略,没有之前和之后事件,处理 Razor 页面或控制器创建、模型绑定、操作过滤器或操作方法中发生的未经处理的异常。但无法捕获资源过滤器、结果过滤器或 MVC 结果执行中发生的异常 。.

二、异常过滤器实现
异常过滤器定义:
异常过滤器的定义,需要实现接口IExceptionFilter 或者IAsyncExceptionFilter,该接口包含一个 OnException 方法或者OnExceptionAsync方,用于处理发生的异常,继承后重写此方法。
#region << 版 本 注 释 >>/*----------------------------------------------------------------* 创建者:王明亮* 创建时间:2023/8/15 14:02:01* 版本:V1.0.0* 描述:** ----------------------------------------------------------------* 修改人:* 时间:* 修改说明:** 版本:V1.0.1*----------------------------------------------------------------*/#endregion << 版 本 注 释 >>using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Mvc.Filters;using System;namespace MyWebApp.Filter{/// <summary>/// 异常过滤器/// </summary>public class ExceptionFilter : Attribute, IExceptionFilter{/// <summary>/// 没有之前和之后事件,当程序发生没有捕获的异常时候执行/// </summary>/// <param name="context"></param>public void OnException(ExceptionContext context){//异常信息var ex = context.Exception;//这里可以写入异常日志到数据库、文件或者控制台Console.WriteLine("错误信息:"+ex.Message);/** 方便测试,此处将错误日志信息返回*/context.Result = new ContentResult(){Content = ex.Message,ContentType = "text/html"};}}}
添加到全局过滤器:
services.AddMvc(options =>{//异常过滤器options.Filters.Add<ExceptionFilter>();});
添加测试Action:
using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using System;namespace MyWebApp.Controllers{[Route("api/[controller]")][ApiController]public class ExceptionFilterController : ControllerBase{/// <summary>/// 测试:手动抛出一个未捕获异常/// </summary>/// <returns></returns>[HttpGet]public ActionResult Test(){throw new Exception("Oh,My God,A Exception Occurred......");}}}
三、验证:
接口Action访问调用:
访问地址:
https://localhost:5001/ExceptionFilter/Test控制台输出异常信息:

调用接口时异常过滤器返回异常:
