• .net5


    概念

     异常过滤器是一种可以在 WebAPI 中捕获那些未得到处理的异常的过滤器,要想创建异常过滤器,你需要实现 IExceptionFilter 接口,不过这种方式比较麻烦,更快捷的方法是直接继承 ExceptionFilterAttribute 并重写里面的 OnException() 方法即可,这是因为 ExceptionFilterAttribute 类本身就实现了 IExceptionFilter 接口

    全局

    XXX.Common项目下新建自定义异常类:新建文件夹【Custom】新建类:BusinessException.cs【名字自己定义】

    using System;
    
    namespace Test.Common.Custom
    {
        public class BusinessException : Exception
        {
    
        }
    }

    WebApi项目下新建文件夹【Custom/Exception】,在Exception文件夹下新建类:CustomExceptionFilterAttribute

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    using Microsoft.Extensions.Configuration;
    using Test.Common.Custom;
    
    namespace Test.WebApi.Custom.Exception
    {
        public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
        {
            private readonly IConfiguration _configuration;
    
            public CustomExceptionFilterAttribute(IConfiguration configuration)
            {
                _configuration = configuration;
            }
    
            public override void OnException(ExceptionContext context)
            {
                #region 自定义异常
                if (context.Exception.GetType() == typeof(BusinessException))
                {
                    ResponseDto response = new ResponseDto()
                    {
                        Success = false,
                        Message = context.Exception.Message
                    };
                    context.Result = new JsonResult(response);
                }
                #endregion
    
                #region 捕获程序异常,友好提示
                else
                {
                    ResponseDto response = new ResponseDto()
                    {
                        Success = false,
                        Message = "服务器忙,请稍后再试"
                    };
                    if (_configuration["AppSetting:DisplayExceptionOrNot"] == "1")
                    {
                        response.Message = context.Exception.Message;
                    }
                    context.Result = new JsonResult(response);
                }
                #endregion
            }
        }
    }
    

    Startup中注册

                    options.Filters.Add<CustomExceptionFilterAttribute>();
    

      

    缩小粒度到 Controller 或者 Action 级别
    [DatabaseExceptionFilter]
    public class EmployeesController : ApiController
    {
        //Some code
    }
    
     [CustomExceptionFilter]
     public IEnumerable<string> Get()
     {
        throw new DivideByZeroException(); 
     }
    

      

  • 相关阅读:
    jvm2-垃圾回收
    Elasticsearch脑裂问题详细分析以及解决方案
    ThreadLocal原理(基于jdk1.8)
    seata-分布式事务-学习笔记
    Java中的数组
    HAProxy 详细配置说明
    (基础)--- 约数
    (基础)--- Trie树
    Oracle 数据类型对比 不同数据类型对数据空间占用及查询效率影响
    python F score打分
  • 原文地址:https://www.cnblogs.com/gygtech/p/14478712.html
Copyright © 2020-2023  润新知