.NetCore过滤器之异常处理

.NetCore过滤器之异常处理

1.过滤器介绍

Net Core中有各种Filter,分别是AuthorizationFilter、ResourceFilter、ExceptionFilter、ActionFilter、ResultFilter。可以把他们看作是.Net Core自带的AOP的扩展封装。

这里我们介绍异常过滤器,ExceptionFilter,它是用于用于全局的异常处理

2.项目使用

新增ExceptionAttribute.cs文件,代码如下所示:

    public class ExceptionAttribute : ExceptionFilterAttribute
    {
        private readonly IWebHostEnvironment _env;      
        private readonly ILogger<ExceptionAttribute> _logger;

        public ExceptionAttribute(IWebHostEnvironment env, ILogger<ExceptionAttribute> logger)
        {
            _env = env;          
            _logger = logger;
        }

        public override async Task OnExceptionAsync(ExceptionContext context)
        {
            Exception exception = context.Exception;
            string msg = context.Exception.Message;
            string sessionId =  context.HttpContext.Items[ApiContextKeys.SESSION_ID];
            string action = context.HttpContext.Items[ApiContextKeys.ACCESS_ACTION];
            //逻辑处理           

            var error = new ResultDTO(-10, "系统异常");
            if (_env.IsDevelopment())
            {
                error.Data = context.Exception.StackTrace;
            }

            if (exception is Exception)
            {
                SysException Exception = exception as SysException;
                error.Code = Exception.Code;
                error.Msg = Exception.Message;
            }
            else
            {
                //记录错误日志文件
                _logger.LogError(exception, exception.Message);
            }       

            context.Result = new ObjectResult(error) { StatusCode = (int)HttpStatusCode.OK };
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
            context.ExceptionHandled = true;

            await base.OnExceptionAsync(context);
        }

       

在StartUp.cs文件中的ConfigureServices函数加入下列代码:

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers(config =>
            {     
                config.Filters.Add(typeof(ExceptionAttribute));
            });

        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laiger90

众筹一元加个菜~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值