• [Abp vNext 入坑分享]


    一、简要说明

    【项目源码】

    【章节目录】

      前面我们已经初步完成了框架的功能了,jwt的也已经接入完成了。
      现在需要进行全局异常的接入了,abpvnext官方本来就有了全局异常的模块了,介绍链接。但是我自己感觉那个并不是很符合我自己的开发标准,因此需要替换掉他们的异常处理,变成由我们自己输出的形式,且记录日志。
      替换之前,首先我们需要知道的是在netcore中,若要定义自己的异常filter是需要继承IExceptionFilter的,并在Starup里面去注入。因此AbpExceptionFilter也是继承IExceptionFilter的。因此它也属于filter中的一种。其次netcore项目中,filter是可以通过MvcOptions中的options.Filters去获取到所有的注入的filter的。因此我们需要把AbpExceptionFilter找出来,并移除,然后再添加我们自己注入的ExceptionFilter就可以了。具体看以下步骤吧:

    二、具体步骤

    2.1、 首先我们在Host的Module中的ConfigureServices里面添加以下的代码把AbpExceptionFilter从filter中找出来,然后移除:

     Configure<MvcOptions>(options =>
                {
                    var index = options.Filters.ToList().FindIndex(filter => filter is ServiceFilterAttribute attr && attr.ServiceType.Equals(typeof(AbpExceptionFilter)));
                    if (index > -1)
                        options.Filters.RemoveAt(index);
                });
    

    2.2、 定义好我们的LeanGlobalExceptionFilter并继承IExceptionFilter,实现相应的方法,如下:

    public class LeanGlobalExceptionFilter: IExceptionFilter
        {
            private readonly ILogger<LeanGlobalExceptionFilter> logger;
    
            public LeanGlobalExceptionFilter( ILogger<LeanGlobalExceptionFilter> logger)
            {
                this.logger = logger;
            }
    
            public void OnException(ExceptionContext context)
            {
                logger.LogError(new EventId(context.Exception.HResult),
                    context.Exception,
                    context.Exception.Message);
                context.Result = new JsonResult(new{ code = 500, err = "系统异常" });
                context.ExceptionHandled = true;
            }
        }
    

    2.3、回到Host的Module中,在除去AbpExceptionFilter的后面添加我们自己的filter,如下

     Configure<MvcOptions>(options =>
                {
                    var index = options.Filters.ToList().FindIndex(filter => filter is ServiceFilterAttribute attr && attr.ServiceType.Equals(typeof(AbpExceptionFilter)));
                    if (index > -1)
                        options.Filters.RemoveAt(index);
                    options.Filters.Add(typeof(LeanGlobalExceptionFilter));
                });
    

    2.4、这样我们就添加好自己的全局异常的filter了,下面让我们来试一下是否替换成功了。添加好异常代码 int ssss = int.Parse("aaaaa");
    跑起项目,在swagger中测试请求,如下图所示,这样就说明全局异常已经完成替换了。

    三、下一章介绍

    swagger的完整接入方法

  • 相关阅读:
    JS原始类型Number数字类型
    JS数据类型基础知识
    JS基础循环语句和跳转语句
    JS对象类型数组方法篇
    JS对象类型数组基础篇
    JS基础逻辑运算符
    IE6,IE7,FF等浏览器不兼容原因及解决办法(转)
    DML、DDL、DCL区别
    Asp.net(c#)GridView分页时用图片显示上一页,下一页
    P3P完成跨域COOKIE
  • 原文地址:https://www.cnblogs.com/twoBcoder/p/12838913.html
Copyright © 2020-2023  润新知