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<MyExceptionFilter>();
});
3.2全局异常过滤器ExceptionFilterAttribute
public class MyExceptionFilterAttribute: ExceptionFilterAttribute
{
//重写OnException
public override void OnException(ExceptionContext context)
{
base.OnException(context);
}
}
ConfigureServices 添加
services.AddMvc(mvcOptions=> {
mvcOptions.Filters.Add<MyExceptionFilterAttribute>();
});
异常过滤器的方式,他是作用在MVC的整个框架的体系下面,并不是在我们的中间件的最早期发上作用的,
而是在MVC的整个生命周期里面去发生作用,也就是说他只能工作在MVC WEB API的请求周期里面,如果我们在MVC的中间件之前输出错误,他是没办法处理的
应用场景:一般是我们需要对Controller进行特殊的异常处理
ExceptionFilter 和 ExceptionFilterAttribute
Attribute区别在于我们可以更细粒度的对我们的异常处理进行控制,我们可以指定部分的Controller或Exception,Attribute也可以在注册在全局,因为Attribute也实现了IExceptionFilter,如果注册在ConfigureServices 就不需要在Controller上标注Attribute
网友评论