NETCore异常处理的几种方式ExceptionFilter,ExceptionFilterAttribute

1、跳转页面

 //跳转错误页的方式
  app.UseExceptionHandler("/error");

2.使用匿名委托来处理

//匿名委托方式
app.UseExceptionHandler(errApp=> {
            errApp.Run(async context => {
                //逻辑异常处理
            });
        });

3.1全局异常过滤器ExceptionFilter

public class MyExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        throw new NotImplementedException();
    }
}

ConfigureServices 添加

services.AddMvc(mvcOptions=> {
            mvcOptions.Filters.Add();
        });

3.2全局异常过滤器ExceptionFilterAttribute

 public class MyExceptionFilterAttribute: ExceptionFilterAttribute
{
    //重写OnException
    public override void OnException(ExceptionContext context)
    {
        base.OnException(context);
        
    }
}

ConfigureServices 添加

services.AddMvc(mvcOptions=> {
            mvcOptions.Filters.Add();
        });

异常过滤器的方式,他是作用在MVC的整个框架的体系下面,并不是在我们的中间件的最早期发上作用的,
而是在MVC的整个生命周期里面去发生作用,也就是说他只能工作在MVC WEB API的请求周期里面,如果我们在MVC的中间件之前输出错误,他是没办法处理的
应用场景:一般是我们需要对Controller进行特殊的异常处理

ExceptionFilter 和 ExceptionFilterAttribute
Attribute区别在于我们可以更细粒度的对我们的异常处理进行控制,我们可以指定部分的Controller或Exception,Attribute也可以在注册在全局,因为Attribute也实现了IExceptionFilter,如果注册在ConfigureServices 就不需要在Controller上标注Attribute

你可能感兴趣的:(NETCore异常处理的几种方式ExceptionFilter,ExceptionFilterAttribute)