[.NET] 使用VALIDATIONCONTEXT快速进行模型资料的验证 》简单xml创建-json转xml
[.NET] 使用VALIDATIONCONTEXT快速进行模型资料的验证
在进行WebAPI功能开发的时候,一般传统的验证资料是否合法的方式,都是透过if/else的方式进行判断
若是使用ValidationContext,就可以省去很多自行撰写程式码的工作
要使用ValidationContext的验证方式很简单,我先用一个简单的例子来说明就可以呈现所需要的结果
1.首先先在专案中建立一个新的模型档案,并在模型档案中加入下面的程式码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class ValidModels{ /// <summary> /// 輸入資料的模型 /// </summary> public class ValidInfoQuery { [Required] public string Name { get; set; } public string Tel { get; set; } public string Address { get; set; } [Required] [Range(1, 130)] public int Age { get; set; } [Required] public DateTime Birthday { get; set; } } /// <summary> /// 回傳驗證結果的模型 /// </summary> public class ValidInfoResult { public bool IsValid { get; set; } public List<ValidItem> List { get; set; } public class ValidItem { public IEnumerable<string> Field { get; set; } public string Message { get; set; } } }} |
在这个模型中,我们定义了要输入的资料模型,以及要回传的模型定义,在输入的模型ValidInfoQuery中,特别在"Name"、"Age"、"Birthday"三个栏位中,加上[Required]的属性。并且在"Age"的栏位中,加入[Range(1, 130)]的属性,代表Age的合法值在1到130之间
2.接着加入一个新的控制器"ValidController.cs",加入一个POST的方法,并将刚刚新增的模型,分别放入Input以及Output的参数
|
1
2
3
4
5
6
7
8
9
10
11
|
public class ValidController : ApiController{ /// <summary> /// 執行資料寫入的Post動作 /// </summary> /// <param name="query"></param> public Models.ValidModels.ValidInfoResult Post(Models.ValidModels.ValidInfoQuery query) { }} |
3.一般传统进行输入资料验证的方式,会采用下面的方式进行验证
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// 傳統欄位驗證的寫法// 驗證Name欄位if (string.IsNullOrEmpty(query.Name)){ result.IsValid = false; result.List.Add(new Models.ValidModels.ValidInfoResult.ValidItem() { Field = new List<string> { "Name" }, Message = "Name欄位必填" });}// 驗證Age欄位if (query.Age > 130 || query.Age < 1){ result.IsValid = false; result.List.Add(new Models.ValidModels.ValidInfoResult.ValidItem() { Field = new List<string> { "Age" }, Message = "Age欄位必須在1與130之間" });} |
但是这样的写法,一但Input模型的栏位增加的话,程式码也会相对的增加。也会影响程式码的效率。所以我们将验证的方式更改一下,改为ValidationContext进行验证
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// 使用ValidationContext的驗證物件// 定義ValidationContext的驗證物件var context = new ValidationContext(query);// 定義進行Validation回傳的訊息var validationResults = new List<ValidationResult>();// 進行驗證動作bool isValid = Validator.TryValidateObject(query, context, validationResults, true);// 將驗證結果進行處理,並回傳到指定的回傳物件中result.IsValid = isValid;result.List = validationResults.Select(c => new Models.ValidModels.ValidInfoResult.ValidItem() { Field = c.MemberNames, Message = c.ErrorMessage }) .ToList(); |
从上面的程式码可以很清楚的看到,只要定义出一个ValidationContext物件,并将要验证的模型资料传入,就可以在TryValidateObject的方法中,将所有资料不合法的栏位进行验证并得到结果
4.程式码完成后,我们实际执行刚刚的程式内容,并透过Swagger进行资料的输入。其中Name的栏位以及Age的栏位我刻意输入了不合法的内容

按下"Try it"之后,得到的结果如下图所示

可以看到,在结果的显示上,很清楚的列出"Name "与"Age"两个栏位是验证失败的,也显示了为什么发生错误的讯息内容
透过ValidationContext的验证方式,除了可以很快的完成模型资料的合法性验证外,也可以大量的减少撰写验证资料的程式码,提升程式效率与开发速度
范例程式下载
https://github.com/madukapai/maduka-WebAPI
》简单xml创建-json转xml

1 public XmlDocument createXml() {
2 XmlDocument xmlDoc = new XmlDocument();
3 string xmlJson = @"{
4 ""?xml"": {
5 ""@version"": ""1.0"",
6 ""@encoding"": ""gb2312""
7 },
8 ""weixin"": {
9 ""token"":
10 {
11 ""@Tokenstr"": ""xxxxxxxxxxxxxxx"",
12 ""@Refreshtime"": ""2016/12/12 16:49:52""
13 },
14 ""ticket"":
15 {
16 ""@Ticketstr"": """",
17 ""@Refreshtime"": ""2016/12/8 14:56:34""
18 },
19 ""cardticket"":
20 {
21 ""@Ticketstr"": """",
22 ""@Refreshtime"": ""2016/11/10 9:51:52""
23 }
24 }
25 }";
26 xmlDoc = JsonConvert.DeserializeXmlNode(xmlJson);
27 xmlDoc.Save(path);
28 return xmlDoc;
29 }

[.NET] 使用VALIDATIONCONTEXT快速进行模型资料的验证 》简单xml创建-json转xml的更多相关文章
- [.NET] 使用ValidationContext快速进行模型资料的验证
在进行WebAPI功能开发的时候,一般传统的验证资料是否合法的方式,都是透过if/else的方式进行判断若是使用ValidationContext,就可以省去很多自行撰写程式码的工作 要使用Valid ...
- asp.net core系列 45 Web应用 模型绑定和验证
一. 模型绑定 ASP.NET Core MVC 中的模型绑定,是将 HTTP 请求中的数据映射到action方法参数. 这些参数可能是简单类型的参数,如字符串.整数或浮点数,也可能是复杂类型的参数. ...
- Verification of Model Transformations A Survey of the State-of-the-Art 模型转换的验证 对现状的调查
模型驱动工程范式认为软件开发生命周期由工件(需求规范.分析和设计文档.测试套件.源代码)支持,这些工件是表示要构建的系统不同视图的模型.存在一个由模型转换驱动的(半)自动构造过程,从系统的抽象模型开始 ...
- [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则
目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...
- iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)
一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...
- NancyFX 第七章 模型绑定和验证
任何优秀的框架,都能传递参数.在之前的路由章节,我们已经看到了如何在URL中传递参数. 能够传递简单的参数当然好,特别是在设计那些从数据库读取记录的API设计中.但是,很多情况下也是需要传递复杂对象. ...
- 后盾网lavarel视频项目---模型一对多关联简单实例
后盾网lavarel视频项目---模型一对多关联简单实例 一.总结 一句话总结: 在模型中定义一个方法来设置一对多关联:return $this->hasMany(Video::class); ...
- 第二篇MTV模型、基本命令、简单配置
MTV模型.基本命令.简单配置 阅读目录(Content) MTV模型 基本命令 简单配置 MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Tem ...
随机推荐
- NSProxy
NSProxy类在分布式对象架构中是很重要的.由于作用比较特别,NSProxy在Cocoa程序中出现频率很低. NSProxy 是一个抽象类,它为一些表现的像是其它对象替身或者并不存在的对象定义一套A ...
- ECShop模板原理
模板的原理 类似Smarty/ECShop这类模板的原理如下图所示. 1.首先是编译模板ECShop/Smart是利用PHP引擎,所以编译的结果是一个PHP文件,其编译过程就是 将分隔符{}替换成PH ...
- 解决input框中加入disabled="disabled"之后,改变字体的颜色(默认的是灰色)
在input框中加入disabled="disabled"之后,字体默认的就变成灰色了 解决方案 input[disabled]{color:#fff;opacity:1} dis ...
- JAVA设计模式——第 5 章 工厂方法模式【Factory Method Pattern】(转)
女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了.这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空 ...
- Flex报错Error #2048: 安全沙箱冲突
Flex+JPA架构,JPA程序迁移,从Aserver到B. 其它一切没变.唯一变的就是IP. 前端Flex也就是swf报错Error #2048: 安全沙箱冲突:http://xxx.swf 不能从 ...
- Centos 6下安装Oracle 11gR2
一.安装环境 CentOS release 6.7 (Final) Oracle Database 11g Release 2 二.安装前准备 #修改主机名 修改/etc/sysconfig/netw ...
- html 5检查Mobile App是否在线
在PhoneGap应用,或者黑莓Java/HTML混搭应用中,如何使用JavaScript检查Mobile App网络连接状态呢? <script type="text/javascr ...
- 转 解决:error: Cannot find libmysqlclient_r under /usr/local/mysql.
配置php的时候出现以下问题解决方案 checking for MySQL support... yeschecking for specified location of the MySQL UNI ...
- Inno Setup入门(八)——有选择性的安装文件
这主要使用[Components]段实现,一个演示的代码如下: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TEST DefaultDirName=" ...
- rhel7.x配置本地yum
转载:http://www.mvpbang.com/articles/2017/12/22/1513948827684.html rhel7.x配置本地yum 环境: centos7.4 vmarew ...