# ExceptionFilter 的同步实现

public class CustomExceptionFilterAttribute : Attribute, IExceptionFilter
    {
        public void OnException(ExceptionContext context)
        {
            Console.WriteLine(context.Exception);
        }
    }

将异常过滤器标注在 action 中

[Route("/api/[action]")]
public class ExceptionController:ControllerBase
{
        public ExceptionController() 
        {
        }
        [HttpGet]
        [CustomExceptionFilterAttribute]
        public string ExceptionIndex() 
        {
            int zero = 0;
            int a = 10 / zero;
            return "exceptionFilter";
        }
}

# 运行项目

# 结论

当发生异常时捕获异常进行处理

# ExceptionFilter 的异步实现

public class CustomAsyncExceptionFilterAttribute : Attribute, IAsyncExceptionFilter
    {
        public Task OnExceptionAsync(ExceptionContext context)
        {
             Console.WriteLine(context.Exception);
        }
    }

# ExceptionFilter 在业务上能做什么

对异常事件的记录以便开发人员调试追踪。对异常结果进行人性化处理,对用户更加友好

异常处理之前的结果

public class CustomExceptionFilterAttribute : Attribute, IExceptionFilter
    {
        public void OnException (ExceptionContext context)
        {
            context.Result = new JsonResult (new
            {
                success=false,
                message="程序异常"+context.Exception.Message
            });
            Console.WriteLine (context.Exception);
        }
    }

异常处理之后的结果

# 局限性

ExceptionFilter有一个捕获异常的范围。如果异常发生在范围外。该异常将不再被捕获