FluentValidation在asp.net core中怎么使用?

先安装包。

Install-Package FluentValidation.AspNetCore

和上一篇的实体类和验证类一样。

实体类:

public class Person
{public int Id { get; set; }public string Name { get; set; }public string Tel { get; set; }public string Email { get; set; }public DateTime Birthday { get; set; }public string IDCard { get; set; }public PersonAddress Address { get; set; }
}
public class PersonAddress
{public string Country { get; set; }public string Province { get; set; }public string City { get; set; }public string County { get; set; }public string Address { get; set; }public string Postcode { get; set; }
}

验证类:

/// <summary>
/// Person验证
/// </summary>
public class PersonValidator : AbstractValidator<Person>
{public PersonValidator(){RuleFor(p => p.Name).NotNull().NotEmpty();RuleFor(p => p.Email).NotNull().EmailAddress();RuleFor(p => p.Birthday).NotNull();RuleFor(p => p.IDCard).NotNull().When(p => (DateTime.Now > p.Birthday.AddYears(1))).WithMessage(p => $"出生日期为{p.Birthday},现在时间为{DateTime.Now},大于一岁,CardID值必填!").NotEmpty().When(p => (DateTime.Now > p.Birthday.AddYears(1))).WithMessage(p => $"出生日期为{p.Birthday},现在时间为{DateTime.Now},大于一岁,CardID值必填!").Length(18).When(p => (DateTime.Now > p.Birthday.AddYears(1)));RuleFor(p => p.Tel).NotNull().Matches(@"^(\d{3,4}-)?\d{6,8}$|^[1]+[3,4,5,8]+\d{9}$");RuleFor(p => p.Address).NotNull();RuleFor(p => p.Address).SetValidator(new PersonAddressValidator());}
}
/// <summary>
/// Person Address验证
/// </summary>
public class PersonAddressValidator : AbstractValidator<PersonAddress>
{public PersonAddressValidator(){RuleFor(a => a.Country).NotNull().NotEmpty();RuleFor(a => a.Province).NotNull().NotEmpty();RuleFor(a => a.City).NotNull().NotEmpty();RuleFor(a => a.County).NotNull().NotEmpty();RuleFor(a => a.Address).NotNull().NotEmpty();RuleFor(a => a.Postcode).NotNull().NotEmpty().Length(6);}
}

Starup.cs

public void ConfigureServices(IServiceCollection services)
{services.AddControllers().AddFluentValidation();services.AddTransient<IValidator<Person>, PersonValidator>();services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "FluentValidationWebDemo01", Version = "v1" });});
}

这里和asp.net core mvc的模型验证如出一辙。

 [ApiController][Route("[controller]")]public class HomeController : ControllerBase{private readonly ILogger<HomeController> _logger;private readonly IValidator<Person> _validator;public HomeController(ILogger<HomeController> logger, IValidator<Person> validator){_validator = validator;_logger = logger;}[HttpPost("/addperson")]public IActionResult AddPerson([FromBody] Person person){_logger.LogInformation("添加Person");if (ModelState.IsValid){return Ok("验证成功后,假装这里作了后端业务处理");}_logger.LogError("验证Person失败");return BadRequest("person没有验证通过");}}

测试传入数据:

{"id":0,"birthday":"2021-03-29T07:00:18.061Z","idCard":"","name":"","email":"axzxs2001163.com","tel":"1345346714","address":{"country":"中国","province":"山西","city":"","county":"古城","address":"","postcode":"04600"}
}

结果:

{"type": "https://tools.ietf.org/html/rfc7231#p-6.5.1","title": "One or more validation errors occurred.","status": 400,"traceId": "00-21fffead3f693fdf9156d796baf4e4ef-a7d39f85acf57cff-00","errors": {"Tel": ["'Tel' 的格式不正确。"],"Name": ["'Name' 不能为空。"],"Email": ["'Email' 不是有效的电子邮件地址。"],"Address.City": ["'City' 不能为空。"],"Address.Address": ["'Address' 不能为空。"],"Address.Postcode": ["'Postcode' 必须是 6 个字符,您输入了 5 字符。"]}
}

还是那句话,FluentValidation提供了更灵活,完强大的验证方式

在asp.net core中使用的验证框架FluentValidation相关推荐

  1. asp绑定gridview属性_理解ASP.NET Core中的模型验证

    当MVC执行模型绑定后,为了验证绑定为参数提供的值是否符合预期,还需要进行模型验证. 一.理解模型验证 模型验证是指模型绑定后对Action参数进行验证的过程.它会根据事先定义的规则对参数的值进行验证 ...

  2. 如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序

    图片 假设我们要创建一个监视Web应用程序,该应用程序为用户提供了一个能够显示一系列信息的仪表板,这些信息会随着时间的推移而更新. 第一种方法是在定义的时间间隔(轮询)定期调用API 以更新仪表板上的 ...

  3. 探索ASP.NET Core中的IStartupFilter

    原文:Exploring IStartupFilter in ASP.NET Core 作者:Andrew Lock 译者:Lamond Lu 在本篇博客中,我将介绍一下IStartupFilter, ...

  4. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

    前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...

  5. ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态

    原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...

  6. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  7. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用

     1622219047536 写在前面   Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下 ...

  8. 如何在 ASP.Net Core 中使用 HTTP.sys WebServer ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,大家都知道 Kestrel 是 ASP.Net Core 内置的跨平台web服务器,但是它有一定的局 ...

  9. ASP.NET Core中的内存缓存

    ASP.NET Core中的内存中缓存 让我们看看如何通过缓存优化ASP.NET Core应用程序性能 我相信,在我们的工作中,每个人都收到来自客户的请求或来自我们应用程序用户的反馈,以提高响应速度. ...

最新文章

  1. python生日提醒_python, 实现朋友家人年历生日自动提醒
  2. hibernate中的hql查询语句list查询所有与iterate查询所有的区别
  3. 嵌入式学习笔记-记录系统启动次数
  4. JADAK收购RFID方案商SkyeTek,增强竞争力
  5. QT的QProxyStyle类的使用
  6. js 数组过滤_JS之 开发技巧
  7. java xmpp openfire_搭建Xmpp服务器Openfire
  8. 助力句子变换:35W抽象、43W同义、13W简称三大知识库对外开源
  9. Linux升级内核的正确姿势
  10. 土木工程和计算机专硕,第一次发帖 关于大工土木专硕
  11. NC开发笔记——二开知识点
  12. ABTess之AA 测试
  13. 聚集索引和非聚集索引的区别
  14. typeof和instanceof的区别
  15. 你需要的iPhoneX适配
  16. 宝宝营养粥及如何提高宝宝睡眠
  17. 关于dell戴尔笔记本磁盘空间莫名被占及删除System Volume Information
  18. prometheus-community-PushProx介绍
  19. 确定某天是星期几的c语言程序,计算某天是星期几【C代码】
  20. 每日一题 笨拙的手指

热门文章

  1. unreal无损音乐百度云_将网易云音乐专用的无损音乐格式转换成全平台通用的无损格式...
  2. osi参考模型(开放系统互连参考模型)
  3. 白白的(baibaide)
  4. java虚拟机之内存分配
  5. MySql数据库出现 1396错误
  6. postman--安装及Interceptor插件
  7. 4. ZooKeeper 基本操作
  8. SharePoint 2010 中的BCS身份验证模式
  9. powerpoint预览_如何安排PowerPoint幻灯片的时间以进行更有效的演示
  10. 二进制安位处理_处理器与安​​全性之间的联系是什么?