翼度科技»论坛 编程开发 mysql 查看内容

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

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
一、什么是异常过滤器?

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

二、异常过滤器实现

异常过滤器定义:

异常过滤器的定义,需要实现接口IExceptionFilter 或者IAsyncExceptionFilter,该接口包含一个 OnException 方法或者OnExceptionAsync方,用于处理发生的异常,继承后重写此方法。
  1. #region << 版 本 注 释 >>
  2. /*----------------------------------------------------------------
  3. * 创建者:码农阿亮
  4. * 创建时间:2023/8/15 14:02:01
  5. * 版本:V1.0.0
  6. * 描述:
  7. *
  8. * ----------------------------------------------------------------
  9. * 修改人:
  10. * 时间:
  11. * 修改说明:
  12. *
  13. * 版本:V1.0.1
  14. *----------------------------------------------------------------*/
  15. #endregion << 版 本 注 释 >>
  16. using Microsoft.AspNetCore.Mvc;
  17. using Microsoft.AspNetCore.Mvc.Filters;
  18. using System;
  19. namespace MyWebApp.Filter
  20. {
  21.     /// <summary>
  22.     /// 异常过滤器
  23.     /// </summary>
  24.     public class ExceptionFilter : Attribute, IExceptionFilter
  25.     {
  26.         /// <summary>
  27.         /// 没有之前和之后事件,当程序发生没有捕获的异常时候执行
  28.         /// </summary>
  29.         /// <param name="context"></param>
  30.         public void OnException(ExceptionContext context)
  31.         {
  32.             //异常信息
  33.             var ex = context.Exception;
  34.             //这里可以写入异常日志到数据库、文件或者控制台
  35.             Console.WriteLine("错误信息:"+ex.Message);
  36.             /*
  37.              * 方便测试,此处将错误日志信息返回
  38.              */
  39.             context.Result = new ContentResult()
  40.             {
  41.                 Content = ex.Message,
  42.                 ContentType = "text/html"
  43.             };
  44.         }
  45.     }
  46. }
复制代码
添加到全局过滤器:
  1.     services.AddMvc(options =>
  2.         {
  3.             //异常过滤器
  4.            options.Filters.Add<ExceptionFilter>();
  5.         });
复制代码
添加测试Action:
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using System;
  4. namespace MyWebApp.Controllers
  5. {
  6.    [Route("api/[controller]")]
  7.    [ApiController]
  8.    public class ExceptionFilterController : ControllerBase
  9.    {
  10.        /// <summary>
  11.        /// 测试:手动抛出一个未捕获异常
  12.        /// </summary>
  13.        /// <returns></returns>
  14.        [HttpGet]
  15.        public ActionResult Test()
  16.        {
  17.            throw new Exception("Oh,My God,A Exception Occurred......");
  18.        }
  19.    }
  20. }
复制代码
三、验证:

接口Action访问调用:

访问地址:


  1. https://localhost:5001/ExceptionFilter/Test
复制代码
控制台输出异常信息:

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

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


来源:https://www.cnblogs.com/wml-it/archive/2023/08/15/17631744.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具