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实现友好验证提示的更多相关文章

  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. Java_按位与&,按位或,取反,左移,右移运算符

    //按位与运算& System.out.println(0&0);//0 System.out.println(0&1);//0 System.out.println(1&am ...

  2. 【BZOJ1294】[SCOI2009]围豆豆(动态规划,状压)

    [BZOJ1294][SCOI2009]围豆豆(动态规划,状压) 题面 BZOJ 洛谷 题解 首先考虑如何判断一个点是否在一个多边形内(不一定是凸的),我们从这个点开始,朝着一个方向画一条射线,看看它 ...

  3. Problem C Dist 解题报告

    Problem C Dist Description 有一个\(n\)个点带边权的连通无向图,边集用\(k\)个集合\(s_1,s_2,\dots,s_k\)和\(k\)个整数\(w_1,w_2,\d ...

  4. 广二模拟赛 Problem A: 青春野狼不做理性小魔女的梦 解题报告

    Problem A: 青春野狼不做理性小魔女的梦 题意 给一个长为\(k\)的序列\(A\)和一个数\(n\),给出一部分\(A_i\)的值,另一部分为\(-1\),代表不知道这个\(A_i\)是多少 ...

  5. linux运维之分析日志相关命令(1)

    一.分析日志 1.查看有多少IP访问 awk '{print $1}' log_file|sort|uniq|wc -l 2.查看某一个页面被访问的次数 grep "/index.php&q ...

  6. LANMP环境编译参数查看方法

    nginx编译参数查看:/usr/local/nginx/sbin/nginx -V apache编译参数查看:cat /usr/local/apache2/build/config.nice mys ...

  7. 使用IntelliJ IDEA工具创建SSM(Spring+MyBatis)项目

    1. 安装和使用IntelliJ IDEA 参考:IntelliJ IDEA 的安装和使用教程 2. 创建Web项目 参考:IntelliJ IDEA 创建Java Web项目 3. Spring整合 ...

  8. Spark记录-spark与storm比对与选型(转载)

    大数据实时处理平台市场上产品众多,本文着重讨论spark与storm的比对,最后结合适用场景进行选型. 一.spark与storm的比较 比较点 Storm Spark Streaming 实时计算模 ...

  9. bzoj千题计划205:bzoj1966: [Ahoi2005]VIRUS 病毒检测

    http://www.lydsy.com/JudgeOnline/problem.php?id=1966 f[i][j] 表示s的前i个和t的前j个是否匹配 转移看代码 注意初始化: f[0][0]= ...

  10. bzoj千题计划179:bzoj1237: [SCOI2008]配对

    http://www.lydsy.com/JudgeOnline/problem.php?id=1237 如果没有相同的数不能配对的限制 那就是排好序后 Σ abs(ai-bi) 相同的数不能配对 交 ...