.net core webapi教程-IExceptionFilter、IAsyncExceptionFilter使用详解
深山老妖浏览:8232023-12-04 15:59:55本文累计收益:0我也要赚钱

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、控制器构造函数的异常可以捕捉到。

评论列表
发表评论
+ 关注