Nuget包导入FluentValidation.AspNetCore

官方的用法是在services中添加如下来操作

  1. services.AddMvc().AddFluentValidation(config=> {
  2.  
  3. });

但是个人感觉这种把在验证提示信息不是太友好,比如他的格式往往是这样

多个都触发的情况

因为这是后台触发的验证,抛开前端验证不说,如果触发api接口验证后,提示出来上面的信息,在前端提示有点麻烦,因为后台还有可能出现错误情况或者其他失败情况,格式跟错误格式不一样,前端还要分别处理,所以处理起来不方便

这里我没有使用上面的方式添加服务,通过前面文章中的注入,我自己注入了模型的验证服务

重新封装了下验证触发后的返回结果 统一封装在OperatorResult类中,与接口本生发生错误返回的结果一致,这样前端就不必为了区分验证提示还是异常提示或者保存失败提示,只需要提示封装的信息即可

下面是我验证类,关于ScopedDI属性标签在前面的文章中有介绍,这样我不需要在ConfigServices中添加任何代码了

  1. [ScopedDI]
  2. public class SchoolDtoValidator : AbstractValidator<SchoolDto>
  3. {
  4. public SchoolDtoValidator()
  5. {
  6.  
  7. RuleFor(x => x.Name).NotEmpty().WithMessage("学校名不能为空");
  8. RuleFor(x => x.Address).NotEmpty().WithMessage("地址不能为空");
  9. }
  10.  
  11. }

接下来就是在Controller中DI上我们的验证

  1. IValidator<SchoolDto> _validator;
  2.  
  3. /// <summary>
  4. /// 构造函数
  5. /// </summary>
  6.  
  7. /// <param name="validator"></param>
  8.  
  9. public DemoController( IValidator<SchoolDto> validator)
  10. {
  11. _validator = validator;
  12.  
  13. }

在相关业务代码中处理下即可,前端只需要根据ResultType判断,提示Message就行了

  1. public async Task<IActionResult> CreateData([FromBody]SchoolDto model)
  2. {
  3. var result = new OperatorResult(ResultType.Fail);
  4. var validationResult = _validator.Validate(model);
  5. if (!validationResult.IsValid)
  6. {
  7. result.Message = string.Join(";", validationResult.Errors);
  8. return Ok(result);
  9. }
  10. try
  11. {
  12. var school = _mapper.Map<SchoolDto, School>(model);
  13. school.Id = Guid.NewGuid();
  14. school.AddClassesDomain(new Classes { CName = "Demo", Id = Guid.NewGuid() });
  15. var command = new DemoCreateCommand { com_school = school };
  16. result = await _mediator.Send(command);
  17. }
  18. catch
  19. {
  20. result.Message = "操作失败";
  21. }
  22. return Ok(result);
  23. }

.NetCore使用FluentValidation实现友好验证提示的更多相关文章

  1. vb6-很简单的配置密码验证提示

    '很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...

  2. MVC与Validate验证提示的样式修改

    MVC中使用Validate的验证,要修改错误提示样式一共有3处需要修改,否则就不太完美了: MVC中的Validate的验证机制只用在后台写一次,就可以完成前台和后台的完美验证,前台的验证主要是依靠 ...

  3. spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获

    spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获 当你的某个控制器内的某个方法报错,基本上回显示出java错误代码,非常不友好,这 ...

  4. easyui验证提示框 卡在屏幕上!!

    场景:验证提示框,关闭diglog窗口后 还显示在页面中 解决方法: 在窗口关闭事件中,删除提示框(这貌似并不可行),只能将验证提示框隐藏起来. $('#dialog').dialog({ onClo ...

  5. Laravel表单验证提示设置多语言

    默认表单提示是英文的,我们可以安装语言包构建多语言环境. 根据版本选择命令 For Laravel 7.x : run composer require caouecs/laravel-lang:~6 ...

  6. Asp.NetCore Web开发之模型验证

    在开发中,验证表单数据是很重要的一环,如果对用户输入的数据不加限制,那么当错误的数据提交到后台后,轻则破坏数据的有效性,重则会导致服务器瘫痪,这是很致命的. 所以进行数据有效性验证是必要的,我们一般通 ...

  7. 标准的EO验证提示错误不够完整,抛出自定义的异常。

    我们通常会在EO里面对某些数据进行验证,比如在邀请供应商注册的时候,ORACLE标准逻辑会验证被邀请的供应商是否已经存在. 其验证逻辑在 oracle.apps.pos.schema.server.S ...

  8. easyui更换主题之后出现validatebox的验证提示信息显示跑偏的解决方案

    在easyui中更换主题为非default的主题,有的主题会出现如下图所示的情况,验证提示信息的提示内容跑到了下面. 现在说下原因和解决方案: 原因:原因是easyui对某些主题没有进行这个样式的设置 ...

  9. netcore 版本升级 导致的cookie验证失败

    排查了两天的问题,本来都是运行正常的cookie验证,突然不好用了,服务器获取不到cookie信息. 我确实是升级了.netcore sdk,之前是2.2.102,后来升级成了2.2.107,一开始并 ...

随机推荐

  1. python接口自动化感悟

    一个方法对应一个接口,每个方法都要有登陆 成一个独立的逻辑功能块

  2. 【设计模式】—— 享元模式Flyweight

    前言:[模式总览]——————————by xingoo 模式意图 享元模式,也叫[轻量级模式]或者[蝇量级模式].主要目的就是为了减少细粒度资源的消耗.比如,一个编辑器用到大量的字母数字和符号,但是 ...

  3. 题解 P1184 【高手之在一起】

    好!机会来了! 依评论区的要求,小金羊献上STLset<string>的题解. 当然不会告诉你map<string,bool>我根本不会用 所以,有什么内置的成员函数救救孩子? ...

  4. MT【196】整数个数

    设函数$f(x)=x^2-2ax+15-2a$的两个零点分别为$x_1,x_2$, 且在区间$(x_1,x_2)$上恰好有两个正整数,则实数$a$的取值范围______ 提示:$1<|x_1-x ...

  5. 【BZOJ3733】[Pa2013]Iloczyn (搜索)

    [BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...

  6. 自动化运维工之Ansible(1)

    1.1 ansible简介 1.1.1 .Ansible软件介绍: Ansible提供一种最简单的方式用于发布.管理和编排计算机系统的工具,可在数分钟内搞定.Ansible由Python语言开发, 默 ...

  7. 【leetcode】Path Sum2

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  8. php错误日志

    php错误日志 /usr/local/php/var/log/php-fpm.log」—————————

  9. python的面向对象-面向对象设计

    1.面向对象设计 def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法 #学校动作 def kaoshi(school): print("[ ...

  10. 函数和常用模块【day04】:内置函数分类总结(十一)

    重点掌握 字符串格式化format() 字符串格式化百分号 判断 转换 数据类型 帮助信息 map和filter()函数 局部变量全局变量 计算内置函数 常用内置函数(其他) 后续会讲 不常用