异常过滤器—MVC中异常过滤器使用
  RuVkuwhEzF1Q 2023年11月02日 89 0

一、什么是异常过滤器?

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

二、异常过滤器实现

异常过滤器定义:

异常过滤器的定义,需要实现接口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

控制台输出异常信息:
image

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  NPQODODLqddb   2024年05月17日   69   0   0 .NET
  mVIyUuLhKsxa   2024年05月17日   53   0   0 .NET
  XkHDHG7Y62UM   2024年05月17日   45   0   0 .NET
  f18CFixvrKz8   2024年05月18日   86   0   0 .NET
  rBgzkhl6abbw   2024年05月18日   78   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   41   0   0 .NET
  S34pIcuyyIVd   2024年05月17日   60   0   0 .NET
  gKJ2xtp6I8Y7   2024年05月17日   50   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   39   0   0 .NET
RuVkuwhEzF1Q