时间:2021-05-26
前面两篇文章学习到了,服务端验证,和客户端的验证,但大家有没有发现,这两种验证各自都有弊端,服务器端的验证,验证的逻辑和代码的逻辑混合在一起了,如果代码量很大的话,以后维护扩展起来,就不是很方便。而客户端的验证,必须要启用客户端验证,也就是在配置文件中配置相应的节点,并且还要引入Jquery插件。如果人为的在浏览器上,禁用了js脚本,那么客户端验证就不起作用了,所以在这里,我将继续学习另外一个验证,也就是Fluent Validation。
Fluent Validation是一个开源的.NET类库,它使用Fluent接口和lambda表达式,来为实体做验证。Fluent Validation是专门为实体做验证使用的。它的优点是:把验证逻辑和你代码的业务逻辑分别开了。这就是AOP的思想。就是横切关注点。你只需要关注某一个模块。这样就保证了代码的纯洁度。
Fluent Validation开源地址:https://github.com/JeremySkinner/fluentvalidation
例句:
Aspect-oriented program is a new software development paradigm that enables modular implementation of cross-cutting concerns,and poses difficulties for slicing of aspect-oriented programs.
面向方面程序设计作为一种新的软件开发范型,能够实现横切关注点的模块化,其特有的语言元素和功能为切片增加了难度。
好了,废话太多,直接进入正题,
首先我们新建一个空白的MVC项目:在Model文件夹下新建一个类Customer:
然后新建一个文件夹Validator,在里面添加一个类CustomerValidator
既然是要使用Fluent Validation,那么就是要引用它的类库了。
CustomerValidator类中,继承AbstractValidator抽象类,(PS:这里和EF中的Fluent API类似,EF中是继承EntityTypeConfiguration类)
using FluentValidation;using Server_Side_Validation_IN_MVC.Models;using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Server_Side_Validation_IN_MVC.Validator{ public class CustomerValidator:AbstractValidator<Customer> { public CustomerValidator() { RuleFor(s => s.Name).NotEmpty().WithMessage("名字不能为空"); RuleFor(s => s.Email).NotEmpty().WithMessage("电子邮件不能为空"); RuleFor(s => s.Email).EmailAddress().WithMessage("电子邮件格式不合法"); } }}控制器中的代码:
using FluentValidation.Results;using Server_Side_Validation_IN_MVC.Models;using Server_Side_Validation_IN_MVC.Validator;using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace Server_Side_Validation_IN_MVC.Controllers{ public class CustomerController : Controller { // GET: Customer public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(Customer model) { CustomerValidator validator = new CustomerValidator(); ValidationResult result = validator.Validate(model); if (result.IsValid) { ViewBag.Name = model.Name; ViewBag.Email = model.Email; } else { foreach (var item in result.Errors) { ModelState.AddModelError(item.PropertyName, item.ErrorMessage); } } return View(model); } }}修改一下,默认的路由:
什么都不输入,直接点击Create:
输入Name,不输入Email
输入Name,Email输入非法的数据
输入合法的数据:
这里就完成了Fluent Validation验证。大家可以看到,这样的验证是不是干净简洁多了,配置信息都在一个类中,方便维护和扩展。不想数据注解那样,把验证信息和实体混合了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一.概述使用ASP.NET那么SignalR2创建一个实时聊天应用程序。将SignalR添加MVC5应用程序中,并创建聊天视图发送并显示消息。在Demo中,将学
我们开发ASP.NET站点时,如果将jQueryUIDatepicker与ASP.NET的验证控件(如:RequiredFieldValidator)组合使用:
一、ASP.NETMVC的本地化支持ASP.NETMVC的是基于ASP.NET运行,所以由ASP.NET提供的所有功能,都可以在MVC里使用,例如缓存,会话状态
学习是使用asp.net已经有很长一段时间了,现在就来分析一下mvc的整过过程吧。个人计划写一个mvc系列的博文,仅从源代码的角度来分析mvc。在接触mvc时我
在学习ASP.NETMVC之前,需要先了解“什么是MVC?”。也许这对某些ASP/ASP.NET开发人员来说非常陌生,MVC不是一种程序语言,严格说起来也不