zoukankan      html  css  js  c++  java
  • NetCore3.1 配置FluentValidation全局过滤异常

    一、封装全局异常过滤器实现IExceptionFilter接口

        public class GlobalExceptionFilter : IExceptionFilter
        {
            public void OnException(ExceptionContext context)
            {
                if (context.Exception.GetType() == typeof(BusinessException))
                {
                    var exception = (BusinessException)context.Exception;
                    var validation = new
                    {
                        Status = 400,
                        Title = "BadRequest",
                        Detail = exception.Message
                    };
    
                    var json = new
                    {
                        errors = new[] { validation }
                    };
    
                    context.Result = new BadRequestObjectResult(json);
                    context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    context.ExceptionHandled = true;
                }
            }
        }

    二、全局处理模型绑定

        public class ValidationFilter : IAsyncActionFilter
        {
            /// <summary>
            /// 实现异步行为验证过滤器接口
            /// </summary>
            /// <param name="context"></param>
            /// <param name="next"></param>
            /// <returns></returns>
            public async  Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
            {
                if (!context.ModelState.IsValid)
                {
                    context.Result = new BadRequestObjectResult(context.ModelState);
                    return;
                }
    
                await next();
            }
        }

    三、自定义验证器继承抽象类AbstractValidator<T>

        /// <summary>
        /// Fluent 验证器
        /// </summary>
        public class PostValidator:AbstractValidator<PostDto>
        {
            public PostValidator()
            {
                RuleFor(post => post.Description)
                    .NotNull()
                    .Length(10, 500)
                    .WithMessage("描述信息10到500字之间");
    
                RuleFor(post => post.Date)
                    .NotNull()
                    .GreaterThan(DateTime.Now);
            }
        }

    四、注册验证服务

            /// <summary>
            /// 全局注册过滤器
            /// </summary>
            /// <param name="services"></param>
            /// <param name="assembyArr"></param>
            /// <returns></returns>
            public static IServiceCollection AddMvcSer(this IServiceCollection services, Assembly[] assembyArr)
            {
                services.AddMvc(options =>
                {
                    
                    options.Filters.Add<ValidationFilter>();
                })
                       .AddFluentValidation(options =>
                       {
                           //全局注册验证器
                           options.RegisterValidatorsFromAssemblies(assembyArr);
                       });
    
                return services;
            }
  • 相关阅读:
    P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
    Luogu P1447 [NOI2010]能量采集 数论??欧拉
    Luogu P2522 [HAOI2011]Problem b 莫比乌斯反演
    Luogu P2257 YY的GCD 莫比乌斯反演
    [笔记] 数论函数小记
    [笔记] 线性筛小记
    Luogu P1092 虫食算 爆搜
    Luogu P1066 2^k进制数 组合数学
    Luogu P1641 [SCOI2010]生成字符串 组合数学
    Luogu P2532 [AHOI2012]树屋阶梯 卡特兰数
  • 原文地址:https://www.cnblogs.com/ABC-wangyuhan/p/14869073.html
Copyright © 2011-2022 走看看