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(); 
     }
    

      

  • 相关阅读:
    git ssh配置
    spring事务的传播行为
    springboot tomcat启动
    error while loading shared libraries: libstdc++.so.6: cannot open shared object file
    centos7安装nginx1
    linux jdk 配置
    NET CORE 3.1 UPLOAD
    vue table formrt datetime languer
    net core 3.1 swagger
    css
  • 原文地址:https://www.cnblogs.com/gygtech/p/14478712.html
Copyright © 2011-2022 走看看