即墨做网站的,高端html5网站建设织梦模板,桂阳网站制作公司,定西市小企业网站建设FluentValidation 是一个用于 .NET 的开源验证库#xff0c;它提供了一种流畅的接口和强类型验证规则#xff0c;使得验证逻辑表达得更加清晰和简洁。#xff08;Apache-2.0#xff09; FluentValidation 的主要作用包括#xff1a; 提高代码可读性#xff1a;通过使用 F… FluentValidation 是一个用于 .NET 的开源验证库它提供了一种流畅的接口和强类型验证规则使得验证逻辑表达得更加清晰和简洁。Apache-2.0 FluentValidation 的主要作用包括 提高代码可读性通过使用 Fluent 接口和 lambda 表达式FluentValidation 能够让验证逻辑更容易被阅读和理解。简化验证逻辑编写它允许开发者以声明式的方式构建复杂的验证规则这样可以减少编写重复性验证代码的工作量。易于维护由于验证规则是强类型的这使得维护和重构变得更加容易因为编译器可以帮助检查类型安全。支持 .NET 8FluentValidation 更新迅速与 .NET 8 保持同步确保了在新平台上的可用性。自定义错误消息FluentValidation 允许开发者为每个验证规则定义自定义的错误消息这样可以提供更具体的错误反馈给最终用户。扩展性强如果默认提供的验证规则不满足需求开发者可以创建自定义的验证器来应对特定的业务逻辑。集成灵活FluentValidation 可以轻松地集成到现有的 .NET Core Web API 或 MVC 项目中与模型绑定和数据注解无缝协作。 总的来说FluentValidation 是一个功能强大且易于使用的验证库它能够帮助 .NET 开发者构建健壮的应用程序同时保持良好的代码质量和可维护性。 前边我们做了系统登录注册的简单接口对于参数的处理都是通过代码去编写的如下
//验证
if (string.IsNullOrWhiteSpace(para.UserName) || string.IsNullOrWhiteSpace(para.PassWord))
{return ApiResultHelper.Error(请输入账号或密码);
}
如果其他地方也需要类似的判断处理则需要对代码进行复制复制的地方多了后续维护的成本也会加大
所以我们希望能有一个统一的处理方式来规划这些值
于是便有了对FluentValidation验证体系的使用了。
五一结束了也祝各位工作顺利升职加薪
进入正题
1、安装nuget包FluentValidation 2、 配置验证规则。 我这里是把验证模式放在Model层创建Validation文件夹处理的也可以放在入参那边的模型下边。
例子
/// summary
/// 用户登录 入参 校验
/// /summary
public class LoginUserValidator : AbstractValidatorLoginUserParameters
{public LoginUserValidator(){RuleFor(para para.UserName).NotEmpty().WithMessage(【用户名】不能为空);RuleFor(para para.PassWord).NotEmpty().WithMessage(【密码】不能为空);}
}/// summary
/// 用户注册 入参 校验
/// /summary
public class RegisterUserValidator : AbstractValidatorRegisterUserParameters
{public RegisterUserValidator(){//1.不为空string notEmpty 不能为空;RuleFor(para para.UserName).NotEmpty().WithMessage(【用户名】 notEmpty);RuleFor(para para.PassWord).NotEmpty().WithMessage(【密码】 notEmpty);RuleFor(para para.Email).NotEmpty().WithMessage(【邮箱】 notEmpty);RuleFor(para para.AuthCode).NotEmpty().WithMessage(【验证码】 notEmpty);//2.数据库存储长度限制//ps:可用sugar特性或查询数据库配置统一处理吧string notLength 长度有误;RuleFor(para para.UserName).Length(1, 25).WithMessage(【用户名】 notLength);RuleFor(para para.PassWord).Length(6, 18).WithMessage(【密码】 notLength);RuleFor(para para.Email).Length(6, 30).WithMessage(【邮箱】 notLength);//不建议限制RuleFor(user user.AuthCode).Length(6, 8).WithMessage(【验证码】 notLength);//3.格式正则string notMatches 格式不正确;RuleFor(user user.Email).Matches(^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$).WithMessage(【邮箱】 notMatches);//可与上边拼接一起}} 这里一个是简单方式的一个是验证方式较多的。 如有其他需要可自行百度或搜索其他方式方法。
3、注入服务
builder.Services.AddTransientIValidatorLoginUserParameters, LoginUserValidator();
builder.Services.AddTransientIValidatorRegisterUserParameters, RegisterUserValidator();
4、使用。 4.1、控制器层注入 private readonly ILoggerUsersController _logger;private readonly IUsersService _usersService;//参数验证private readonly IValidatorLoginUserParameters _loginUserParametersValidator;private readonly IValidatorRegisterUserParameters _registerUserParametersValidator;/// summary/// 构造函数/// /summary/// param namelogger/parampublic UsersController(ILoggerUsersController logger, IUsersService usersService,IValidatorLoginUserParameters loginUserParametersValidator,IValidatorRegisterUserParameters registerUserParametersValidator){_logger logger;_usersService usersService;_loginUserParametersValidator loginUserParametersValidator;_registerUserParametersValidator registerUserParametersValidator;} 4.2、方法Action中使用 var validationResult _loginUserParametersValidator.Validate(para);if (!validationResult.IsValid){//return BadRequest(validationResult.Errors);var errs validationResult.Errors;var errsStr string.Empty;var index 1;validationResult.Errors.ForEach(t {errsStr errsStr index.ToString() 、 t.ToString() ;index ;});return ApiResultHelper.Error(【参数验证失败】 errsStr);}
5、测试 5.1、如图。无账号 这里把所有有误的都加上来了 然后我们通过信息查看其实为空的是否必然长度是不对的也就没必要体现出来 所以在注入后再添加代码
//1设置模型类的CascadeMode当模型的第一个验证失败后续验证不执行。
ValidatorOptions.Global.DefaultClassLevelCascadeMode CascadeMode.Stop;
//2设置模型字段的CascadeMode当字段的第一个验证失败后续验证不执行。
ValidatorOptions.Global.DefaultRuleLevelCascadeMode CascadeMode.Stop; 这就很符合我们自己写逻辑的规则方式了。 继续测试的效果也就是第一个错误提示了。 最后在验证那一串循环代码可以在封装一下不然也是每次写这么多重复代码。
6、其他 6.1、在查询该功能实现及其他处理可参考文章
fluentvalidation - 简书
https://www.cnblogs.com/wenthing/p/18006465 6.2、拓展自定义一个处理方式。