本章将简单的介绍模型验证。关于模型验证,在现在来说应该是比较老的功能,但是也是现在比较常用的功能。相信各位同学在各个网站都能搜索到相关的教程文档。那么本文还是要说明一下本系统的实现方式。
下面是一个用来验证和展现用户信息的一个 Model:
说明:类属性特性需要引用System.ComponentModel.DataAnnotations。
Required:表示必填项,ErrorMessage是验证失败的信息RegularExpression:标示正则验证,第一个参数指的是正则表达式,第二个参数是验证失败的信息以上两个是System.ComponentModel.DataAnnotations命名空间的特性,当然它还有很多的验证特性,详细的需要访问微软官方文档查看。自定义一个校验特性很简单,创建一个继承 ValidationAttribute 的类,然后重写它的 IsValid 方法。示例:
C# 内置了很多常用数据校验特性类,比如最常用的 RequiredAttribute、StringLengthAttribute、RangeAttribute 等,然而特性验证是多种多样的,在内置无法满足时,我们就可以实现自己的验证特性方法。
其实特性验证很简单,我们自己实现就可以,而且还可以自控,没必要去引用一个第三方的验证类库,况且有些第三方类库内的实现恰好就是如上图我们自己的实现一样。
我们在判断验证状态时一般会在Action里判断ModelState.IsValid是否为true。
如果我们在每个需要验证的Action里面都写这个判断岂不是太麻烦,我们是否可以在进入所有的Action之前都进行验证,如果错误,就直接返回错误信息,不去执行Action了,当然时可以的。我们可以利用MVC的ActionFilter即Action过滤器,在执行Action之前统一判断处理。
我们需要实验一个继承IAsyncActionFilter的类。
如图,我们需要实现OnActionExecutionAsync方法,该方法实现了在访问Action之前和之后的动作。
因此我们在next()之前实现访问之前的验证操作,在next()实现验证之后的操作。上图中,访问之后的我们不需要操作,因此next()之后无需写代码。
敲黑板!!!
此项验证是全局验证,特别的针对于如下代码,其中参数 userName是可以为空的,需要注明string?,而可空对象/属性在.net6中是必须的,也是推荐的,这有助于我们写的代码更具有健壮性。
[HttpGet]
public async Task StudentList(string? userName, int page, int limit, UserStatus? userStatus = null)
=> Json(await userService.StudentList(userName, userStatus, page, limit)); 当然还有一种可以免检的方式,可以在创建一个特性标识,在验证的时候查询方法的特性标识,存在则表示无需验证,否则需要验证。实现的方式也很简单,在这里无需做过多描述。
特别要注意的是:一般的如果项目是WebApi项目那么全局返回Json对象即可。但是本项目是MVC项目,因此存在页面请求和Ajax请求,因此在模型验证过程中我们要做好区分。
我们需要在Program.cs文件中注册模型验证过滤器。
本章实现了模型验证的常规功,通过统一验证我们无需在每个Action中重复写相同的功能,详细功能请获取源码查看。各位同学在阅读实践过程中有看不懂或有其他想法的可以在评论区留言或者私信。教程有帮助的话请各位同学帮忙评论点赞关注三连,感谢大家!
----------------------------------------------------
私信: 校园图书管理系统 可以获取Gitee的链接
版权声明:我们致力于保护作者版权,注重分享,被刊用文章【.net学校(C)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;
工作时间:8:00-18:00
客服电话
电子邮件
beimuxi@protonmail.com
扫码二维码
获取最新动态
