浅谈.net的后台校验

1.场景描述

在开发中,前端的相关模型校验往往不能满足当前开发的需求,也就是并不是十分的安全。于是,很多情况下需要后端进行模型的校验。在.net mvc中,有很多校验的方式(比如:值(1)可以使用内置的标签的校验模式,.net中内置诸如Require/Range/Phone等校验标签,只需在相应的模型字段上打上对应的标签,在相应的Action内使用ModelState.IsVaild便可以进行校验;(2)使用FluentValidation插件(具体的使用查一下文档即可,也比较简单))。本文先抛开这两款校验组件,使用.net 提供的ValidationContext完成自定义的扩展校验。废话不说,直接上代码。

2.代码分享交流

 1 public class ValidContext
 2     {
 3         /// <summary>
 4         /// 校验当前模型
 5         /// </summary>
 6         /// <param name="model"></param>
 7         /// <param name="errorMsg"></param>
 8         /// <param name="ignores"></param>
 9         /// <returns></returns>
10         public static bool Check(object model, ref string errorMsg, IEnumerable<string> ignores = null)
11         {
12             ValidationContext context = new ValidationContext(model);
13             List<ValidationResult> results = new List<ValidationResult>();
14             bool isVail = Validator.TryValidateObject(model, context, results, true);
15             if (isVail)
16             {
17                 errorMsg = "验证通过";
18                 return true;
19             }
20             //判断是否有需要忽略的
21             if (ignores != null)
22               results=results.Where(o =>!ignores.Contains(o.MemberNames.FirstOrDefault())).ToList();
23             if (results.Count > 0)
24             {
25                 errorMsg = results.FirstOrDefault().ErrorMessage;
26                 return false;
27             }
28             errorMsg = "验证通过";
29             return true;
30
31         }
32
33
34     }

 1 /// <summary>
 2     /// 正则表达式常量(随时可扩展)
 3     /// </summary>
 4     public class PattarmConst
 5     {
 6         /// <summary>
 7         /// 邮箱
 8         /// </summary>
 9         public const string IsMail = @"^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$";
10         /// <summary>
11         /// 手机号
12         /// </summary>
13         public const string IsPhone = @"^1[3|4|5|7|8|9][\d]{9}$";
14         /// <summary>
15         /// url
16         /// </summary>
17         public const string IsUrl = @"^((https|http|ftp|rtsp|mms){0,1}(:\/\/){0,1})www\.(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$";
18         /// <summary>
19         /// 汉字
20         /// </summary>
21         public const string IsChinese = @"[\u4e00-\u9fa5]";
22         /// <summary>
23         /// 15 or 18位的身份证号
24         /// </summary>
25         public const string IsIDCard = @"^\d{15}|\d{18}";
26         /// <summary>
27         /// 金额
28         /// </summary>
29         public const string IsPrice = @"^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$";
30     }

 1 /// <summary>
 2     /// 校验属性自定义扩展
 3     /// </summary>
 4     public class RequireExt : ValidationAttribute
 5     {
 6         public RequireType RequireType { get; set; }
 7         public override bool IsValid(object value)
 8         {
 9             if (value == null)
10             {
11                 return false;
12             }
13             string pattarn = string.Empty;
14             switch (RequireType)
15             {
16                 case RequireType.PHONE:
17                     pattarn = PattarmConst.IsPhone;
18                     break;
19                 case RequireType.MAIL:
20                     pattarn = PattarmConst.IsMail;
21                     break;
22                 case RequireType.URL:
23                     pattarn = PattarmConst.IsUrl;
24                     break;
25                 case RequireType.IDCARD:
26                     pattarn = PattarmConst.IsIDCard;
27                     break;
28                 case RequireType.PRICE:
29                     pattarn = PattarmConst.IsPrice;
30                     break;
31                 default:
32                     throw new AccessViolationException("未定义的枚举类型");
33             }
34             if (!Regex.IsMatch(value.ToString(), pattarn))
35             { return false; }
36             return true;
37         }
38     }
39     /// <summary>
40     /// 校验枚举类型
41     /// </summary>
42     public enum RequireType
43     {
44         [Description("手机号")]
45         PHONE = 1,
46         [Description("邮箱")]
47         MAIL = 2,
48         [Description("正规URL")]
49         URL=3,
50         [Description("身份证号")]
51         IDCARD=4,
52         [Description("金额")]
53         PRICE=5
54     }

原文地址:https://www.cnblogs.com/diligent-lsh/p/10074056.html

时间: 2024-10-08 22:36:44

浅谈.net的后台校验的相关文章

浅谈webform开发时前台请求后台数据的方法

说到前台请求后台数据,我们一般都是用到AJAX(异步JavaScript和XML) .AJAX 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,我们可以对网页的某部分进行更新.在这里,主要浅谈一下在.net的webform开发时,前台请求后台的两种方式. 1.使用AjaxPro2.dll  (1)AjaxPro2.dll文件可以去网上下载,下载后引用到项目中. (2)引用到项目之后,在web.config里面的<system.web

浅谈图片服务器的架构演进

浅谈图片服务器的架构演进 现在几乎任何一个网站.Web App以及移动APP等应用都需要有图片展示的功能,对于图片功能从下至上都是很重要的.必须要具有前瞻性的规划好图片服务器,图片的上传和下载速度至关重要,当然这并不是说一上来就搞很NB的架构,至少具备一定扩展性和稳定性.虽然各种架构设计都有,在这里我只是谈谈我的一些个人想法. 对于图片服务器来说IO无疑是消耗资源最为严重的,对于web应用来说需要将图片服务器做一定的分离,否则很可能因为图片服务器的IO负载导致应用 崩溃.因此尤其对于大型网站和应

移动互联网的架构设计浅谈一

一,图片体验的优化. 在手机上显示图片,速度是一个非常重要的体验点,试想,如果您打开一个网站,发现里面的图片一直显示失败或者是x,稍微做得好一点的,可能是一个不消失的loading或者是菊花等等,但不管如何, 没能快速的拉取和展示图片对用户体验是一个极大的挑战.那么,手机上的图片体验如何做呢?这里笔者有些小总结: 1,减少图片的大小.在失真度和图片大小中做好折衷,尽量利用工具减少图片的size,也可以考虑利用不同的图片格式. 2,减少图片的请求数.可以考虑把多个图片利用类似css sprite的

浅谈如何做一名优秀的WEB前端工程师

浅谈如何做一名优秀的WEB前端工程师 随着近两三年来RIA(Rich Internet Applications的缩写,中文含义为:丰富的因特网应用程序)的流行和普及,前端开发这个行业也开始备受关注. 前端开发的入门门槛其实很低,与服务器端语言先慢后快的学习曲线相比,前端开发的学习曲线是先快后慢.Web前端开发核心技术主要包括HTML.CSS.JavaScript等.HTML仅仅是简单的标记语言!CSS 只是无类型的样式修饰语言.当然可以勉强算作弱类型语言.Javascript 的基础部分相对来

浅谈HttpClient

HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议.HttpClient支持的功能如下: 支持Http0.9.Http1.0和Http1.1协议. 实现了Http全部的方法(GET,POST,PUT,HEAD 等). 支持HTTPS协议. 支持代理服务器. 提供安全认证方案. 提供连接池以便重用连接. 连接管理器支持多线

浅谈浏览器的缓存机制

浏览器的缓存可分为HTTP缓存和离线缓存,下面将分别介绍 HTTP缓存 只有GET请求能被缓存,POST不能被缓存.Modified Time/ETag/Expires/Cache都是HTTP协议的缓存策略 先来一个例子 当我们第二次访问百度首页,在Chrome的Network面板中打开一个静态文件时会发现响应的status是:200 OK (from disk cache),不是应该返回304 Not Modified吗?如果你知道答案,那就可以忽略本文了. Cache-Control 简介

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc

单页应用SEO浅谈

单页应用SEO浅谈 前言 单页应用(Single Page Application)越来越受web开发者欢迎,单页应用的体验可以模拟原生应用,一次开发,多端兼容.单页应用并不是一个全新发明的技术,而是随着互联网的发展,满足用户体验的一种综合技术. SEO 一直以来,搜索引擎优化(SEO)是开发者容易忽略的部分.SEO是针对搜索(Google.百度.雅虎搜索等)在技术细节上的优化,例如语义.搜索关键词与内容相关性.收录量.搜索排名等.SEO也是同行.市场竞争常用的的营销手段.Google.百度的搜

浅谈WebLogic和Tomcat

浅谈WebLogic和Tomcat 分类: Java Web2011-11-30 21:19 54484人阅读 评论(19) 收藏 举报 weblogictomcat应用服务器ejbservletjava J2ee开发主要是浏览器和服务器进行交互的一种结构.逻辑都是在后台进行处理,然后再把结果传输回给浏览器.可以看出服务器在这种架构是非常重要的. 这几天接触到两种Java的web服务器,做项目用的Tomcat,看视频看的是WebLogic Server(WLS),都是web服务器,有什么区别和联