.net core webapi教程-IExceptionFilter、IAsyncExceptionFilter使用详解
IExceptionFilter、IAsyncExceptionFilter两个Filter主要使用场景为接收异常并进行处理下面通过实例分别进行讲解。
一、IExceptionFilter讲解
新建一个类ExceptionFilterAttribute继承自Attribute类和IExceptionFilter接口,并且实现OnException方法,代码如下:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace NetCoreStudy.WebApi.Utility.Filters
{
public class ExceptionFilterAttribute : Attribute, IExceptionFilter
{
/// <summary>
/// 当有异常发生的时候,会触发到这里
/// </summary>
/// <param name="context"></param>
/// <exception cref="NotImplementedException"></exception>
public void OnException(ExceptionContext context)
{
//判断异常是否解决
if (context.ExceptionHandled == false)
{
//处理异常代码,处理完异常需要响应结果给客户端
context.Result = new JsonResult(new {
Success=false,
Message=context.Exception.Message
});
context.ExceptionHandled = true;//标记异常已经被处理
}
}
}
}
使用方法只需在Action方法上增加[ExceptionFilter]特性即可。代码如下:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NetCoreStaty.BussinessInterface;
using NetCoreStudy.Model;
using NetCoreStudy.Utility;
using NetCoreStudy.WebApi.Utility.Filters;
namespace NetCoreStudy.WebApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class FilterController : ControllerBase
{
private readonly IBookService _bookService;
public FilterController(IBookService bookService) {
_bookService = bookService;
}
[HttpGet]
[ExceptionFilter]
public IActionResult ExceptionIndex()
{
throw new Exception("其实没啥,就是想要测试异常一下。");
}
}
}
返回结果如下:

二、异常处理场景分析
1、Action出现没有处理的异常可以捕捉到
2、Action出现已经处理的异常不会捕捉
3、Service层出现的异常可以捕捉到
4、View绑定时出现了异常捕捉不到
5、不存在的Url捕捉不到
6、其他Filter中发生的异常有的能捕捉到,有的捕捉不到
7、控制器构造函数的异常可以捕捉到。
猜您可能还喜欢
- .net core webapi教程-Swagger请求参数设置默认值(1926)
- .net core webapi教程-设置返回Json格式与Model大小写一致(1376)
- .net core webapi教程-配置 Swagger 显示接口注释及描述信息(1283)
- .net core webapi教程-设置日期型字段返回Json格式(1265)
- .net core webapi教程-IActionFilter使用详解 (1200)
- .net core webapi教程-Filter全局注册、控制器注册如何排除某些Action方法使其不生效(1097)
- .net core webapi教程-Swagger请求参数通过属性特性设置默认值(1070)
- .net core webapi教程-IExceptionFilter、IAsyncExceptionFilter使用详解 (1002)
- .net core webapi教程-Filter的多种注册方法(963)
- .net core webapi教程-使用log4net写文本日志(922)
评论列表
发表评论
文章分类
文章归档
阅读排行
- 1. Windows Server 2008 R2永久激活及Chew-WGA v0.9下载(13315)
- 2.Visual Studio 2017中安装visualSVN及使用详解(5230)
- 3.完美解决iis下JWplayer提示Error loading media: File could not be played错误(4068)
- 4.asp.net mvc+jquery easyui开发基础(一)模块首页及增加、修改、删除模块实现(3419)
- 5.Android avax.net.ssl.SSLPeerUnverifiedException: No peer certificate 解决方法(httpClient支持HTTPS的访问方式)(3265)
- 6..Net Mvc中使用Jquery EasyUI控件讲解(一)表格控件datagrid使用介绍(3015)
- 7.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(三)登录模块开发(2906)
- 8.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(七)权限管理模块之系统菜单动态生成(2904)
- 9.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(八)权限管理模块之权限管理实现(2515)
- 10. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(六)权限管理模块之初始数据准备(2488)
