.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,一开始并 ...
随机推荐
- #pragma once 与 #ifndef 的使用
为了防止头文件被重复包含,主要有两种方式: 方式一:使用 #ifndef #ifndef OPTIONAL_TEST_H #define OPTIONAL_TEST_H //............. ...
- oracle无法通过IP地址进行连接
在oracle安装完成之后有时候后无法使用IP地址进行连接或者压根无法进行连接,此时我们可以通过配置oracle的监听来解决这个问题: 在开始菜单中找到oracle文件夹的net manager,如下 ...
- Java学习之基本数据类型和引用数据类型区别
JAVA中分为基本数据类型和引用数据类型区别一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存 ...
- Invalid format of Import utility nameVerify that ORACLE_HOME is properly oracle11.2g 无法imp,dmp
1.环境变量 ORACLE_HOME 设置了没 D:\app\product\11.2.0\client_1 2.环境变量 ORACLE_SID 设置为orcl 上面是网上流行的解决方案,然而博主 ...
- MT【79】任意和存在并存
评:一般这个题目是先考虑$x$的存在性,再考虑$t$的任意性.最后按照动区间定轴类型处理,考虑区间和对称轴的相对位置.
- 在Mac OS X上用Fluid把网页变成本地App
最近一直在个在线听音乐的解决方案,也下了很多的本地软件,什么酷狗.酷我.豆瓣.虾米.QQ.百度音乐之类的,下了一大堆,都逐个测试了,效果都不是很理想-- 要么是UI太悲催,要么是对Retina支持不友 ...
- 本地如何连接虚拟机上的MySql
今天在本地链接虚拟机上的MySql,然而链接失败了!甚是尴尬! 首先想一想是什么原因导致链接失败: 基础环境:在Linux上安装mysql 1.检查虚拟机IP在本地是否可以ping 通过 虚拟机IP: ...
- 数据量越发庞大怎么办?新一代数据处理利器Greenplum来助攻
作者:李树桓 个推数据研发工程师 前言:近年来,互联网的快速发展积累了海量大数据,而在这些大数据的处理上,不同技术栈所具备的性能也有所不同,如何快速有效地处理这些庞大的数据仓,成为很多运营者为之苦恼的 ...
- html5 canvas从圆开始
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python 入门基础23 选课系统 项目
选课系统 代码地址:github_code # 选课系统 # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个 ...