异常过滤器—MVC中异常过滤器使用

  • 异常过滤器—MVC中异常过滤器使用已关闭评论
  • 93 次浏览
  • A+
所属分类:.NET技术
摘要

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


一、什么是异常过滤器?

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

控制台输出异常信息:
异常过滤器—MVC中异常过滤器使用

调用接口时异常过滤器返回异常:
异常过滤器—MVC中异常过滤器使用

建群声明:本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得
异常过滤器—MVC中异常过滤器使用