.NetCore使用FluentValidation实现友好验证提示
Nuget包导入FluentValidation.AspNetCore
官方的用法是在services中添加如下来操作
- services.AddMvc().AddFluentValidation(config=> {
- });
但是个人感觉这种把在验证提示信息不是太友好,比如他的格式往往是这样
多个都触发的情况
因为这是后台触发的验证,抛开前端验证不说,如果触发api接口验证后,提示出来上面的信息,在前端提示有点麻烦,因为后台还有可能出现错误情况或者其他失败情况,格式跟错误格式不一样,前端还要分别处理,所以处理起来不方便
这里我没有使用上面的方式添加服务,通过前面文章中的注入,我自己注入了模型的验证服务
重新封装了下验证触发后的返回结果 统一封装在OperatorResult类中,与接口本生发生错误返回的结果一致,这样前端就不必为了区分验证提示还是异常提示或者保存失败提示,只需要提示封装的信息即可
下面是我验证类,关于ScopedDI属性标签在前面的文章中有介绍,这样我不需要在ConfigServices中添加任何代码了
- [ScopedDI]
- public class SchoolDtoValidator : AbstractValidator<SchoolDto>
- {
- public SchoolDtoValidator()
- {
- RuleFor(x => x.Name).NotEmpty().WithMessage("学校名不能为空");
- RuleFor(x => x.Address).NotEmpty().WithMessage("地址不能为空");
- }
- }
接下来就是在Controller中DI上我们的验证
- IValidator<SchoolDto> _validator;
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="validator"></param>
- public DemoController( IValidator<SchoolDto> validator)
- {
- _validator = validator;
- }
在相关业务代码中处理下即可,前端只需要根据ResultType判断,提示Message就行了
- public async Task<IActionResult> CreateData([FromBody]SchoolDto model)
- {
- var result = new OperatorResult(ResultType.Fail);
- var validationResult = _validator.Validate(model);
- if (!validationResult.IsValid)
- {
- result.Message = string.Join(";", validationResult.Errors);
- return Ok(result);
- }
- try
- {
- var school = _mapper.Map<SchoolDto, School>(model);
- school.Id = Guid.NewGuid();
- school.AddClassesDomain(new Classes { CName = "Demo", Id = Guid.NewGuid() });
- var command = new DemoCreateCommand { com_school = school };
- result = await _mediator.Send(command);
- }
- catch
- {
- result.Message = "操作失败";
- }
- return Ok(result);
- }
.NetCore使用FluentValidation实现友好验证提示的更多相关文章
- vb6-很简单的配置密码验证提示
'很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...
- MVC与Validate验证提示的样式修改
MVC中使用Validate的验证,要修改错误提示样式一共有3处需要修改,否则就不太完美了: MVC中的Validate的验证机制只用在后台写一次,就可以完成前台和后台的完美验证,前台的验证主要是依靠 ...
- spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获
spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获 当你的某个控制器内的某个方法报错,基本上回显示出java错误代码,非常不友好,这 ...
- easyui验证提示框 卡在屏幕上!!
场景:验证提示框,关闭diglog窗口后 还显示在页面中 解决方法: 在窗口关闭事件中,删除提示框(这貌似并不可行),只能将验证提示框隐藏起来. $('#dialog').dialog({ onClo ...
- Laravel表单验证提示设置多语言
默认表单提示是英文的,我们可以安装语言包构建多语言环境. 根据版本选择命令 For Laravel 7.x : run composer require caouecs/laravel-lang:~6 ...
- Asp.NetCore Web开发之模型验证
在开发中,验证表单数据是很重要的一环,如果对用户输入的数据不加限制,那么当错误的数据提交到后台后,轻则破坏数据的有效性,重则会导致服务器瘫痪,这是很致命的. 所以进行数据有效性验证是必要的,我们一般通 ...
- 标准的EO验证提示错误不够完整,抛出自定义的异常。
我们通常会在EO里面对某些数据进行验证,比如在邀请供应商注册的时候,ORACLE标准逻辑会验证被邀请的供应商是否已经存在. 其验证逻辑在 oracle.apps.pos.schema.server.S ...
- easyui更换主题之后出现validatebox的验证提示信息显示跑偏的解决方案
在easyui中更换主题为非default的主题,有的主题会出现如下图所示的情况,验证提示信息的提示内容跑到了下面. 现在说下原因和解决方案: 原因:原因是easyui对某些主题没有进行这个样式的设置 ...
- netcore 版本升级 导致的cookie验证失败
排查了两天的问题,本来都是运行正常的cookie验证,突然不好用了,服务器获取不到cookie信息. 我确实是升级了.netcore sdk,之前是2.2.102,后来升级成了2.2.107,一开始并 ...
随机推荐
- python接口自动化感悟
一个方法对应一个接口,每个方法都要有登陆 成一个独立的逻辑功能块
- 【设计模式】—— 享元模式Flyweight
前言:[模式总览]——————————by xingoo 模式意图 享元模式,也叫[轻量级模式]或者[蝇量级模式].主要目的就是为了减少细粒度资源的消耗.比如,一个编辑器用到大量的字母数字和符号,但是 ...
- 题解 P1184 【高手之在一起】
好!机会来了! 依评论区的要求,小金羊献上STLset<string>的题解. 当然不会告诉你map<string,bool>我根本不会用 所以,有什么内置的成员函数救救孩子? ...
- MT【196】整数个数
设函数$f(x)=x^2-2ax+15-2a$的两个零点分别为$x_1,x_2$, 且在区间$(x_1,x_2)$上恰好有两个正整数,则实数$a$的取值范围______ 提示:$1<|x_1-x ...
- 【BZOJ3733】[Pa2013]Iloczyn (搜索)
[BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...
- 自动化运维工之Ansible(1)
1.1 ansible简介 1.1.1 .Ansible软件介绍: Ansible提供一种最简单的方式用于发布.管理和编排计算机系统的工具,可在数分钟内搞定.Ansible由Python语言开发, 默 ...
- 【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 ...
- php错误日志
php错误日志 /usr/local/php/var/log/php-fpm.log」—————————
- python的面向对象-面向对象设计
1.面向对象设计 def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法 #学校动作 def kaoshi(school): print("[ ...
- 函数和常用模块【day04】:内置函数分类总结(十一)
重点掌握 字符串格式化format() 字符串格式化百分号 判断 转换 数据类型 帮助信息 map和filter()函数 局部变量全局变量 计算内置函数 常用内置函数(其他) 后续会讲 不常用