zoukankan      html  css  js  c++  java
  • .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(); 
     }
    

      

  • 相关阅读:
    java基础(4)--javadoc文档与命令
    java基础(3)--pulic class与class的区别
    java基础(2)--main方法讲解
    java基础(1)--注释
    shell 测试文件状态运算符
    shell 算术运算符
    linux free命令详解
    shell 基本语法
    linux vim编辑器优化
    linux shell介绍
  • 原文地址:https://www.cnblogs.com/gygtech/p/14478712.html
Copyright © 2011-2022 走看看