MVC内部针对这此验证是如何实现的咧???现在我们就来分析一下这此验证的背后故事....

1、ModelValidator与ModelValidatorProvider

  虽然Model绑定方式的因绑定参数数据类型的不同有所差异,但ASP.NET MVC中总使用modelValidator的对象对需要验证的对象实施验证,ModelValidator对象提供了一个抽象方法Validate()。
  ModelValidator是由ModelValidatorProviders提供的,ModelValidatorProviders是一个抽象类,有个抽象方法GetValidators供开发人员获取所需验证的模型对象.

2、参数验证(运用篇)

  已经和大家交流了个MVC中的模型绑定,自定义模型验证规则,分享了那么多到底有什么用咧??现在我来和大家来一个运用篇-参数验证。大家都知道了MVC的请求机制->客户端请求(Request)->路由器分析(Routing)->控制器工厂(ControllerFactory)->控制器(Controller)->调用方法(Action Invoke)->创建(ActionInvoke实例对象)->获取参数信息(GetParameterValue)->绑定模型(ModelBinder)->获取验证器(GetValidators)->验证模型->进入方法体(Action)->Response且验证机制是给予Model验证,那问题来了 如何我们只是一个简单的参数,如何实现验证咧?让我们一起看一个如下实例吧。。。
  A、重写AcionInvoke实例对象

  B、获取参数验证器(参数信息与参数属性说明)

  C、绑定模型:尽然MVC验证给予Model验证,那我们就给参数动态创建一个模型(继承MVC自身的DefaultModelBinder类),如图:


4、使用方法

  ModelValidator是由ModelValidatorProviders提供的;
  一、配置验证器提供者:

  二、配置ActionInvoke实例

  三、配置参数属性信息

MVC验证不仅仅限与参数信息、Model验证,它还可以对所有对象实施验证功能,实现高内聚低耦合(eg:XML....)让我们的程式越来越灵活...

MVC之参数验证(二)的更多相关文章

  1. MVC之参数验证(三)

    在实际开发中,项目经理会一直强调一句话,永远不要相信客户端的数据(前端可以不用验证,但是后端必须验证).大家同意这样的说法吧..新端验证毋庸质疑JS验证,提高用户体验我们不得不添加一些与后端一致的验证 ...

  2. MVC之参数验证(一)

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其数据的准确性.总地来说,我们可以采用Syste ...

  3. ASP.NET MVC Model验证(二)

    ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...

  4. JSR-303 Bean Validation 介绍及 Spring MVC 服务端参数验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用很多时候同样的数据验证逻辑会出现在不同的层,这样 ...

  5. [系列] go-gin-api 规划目录和参数验证(二)

    目录 概述 规划目录结构 模型绑定和验证 自定义验证器 制定 API 返回结构 源码地址 go-gin-api 系列文章 概述 首先同步下项目概况: 上篇文章分享了,使用 go modules 初始化 ...

  6. go-gin-api 规划目录和参数验证(二)

    概述 首先同步下项目概况: 上篇文章分享了,使用 go modules 初始化项目,这篇文章咱们分享: 规划目录结构 模型绑定和验证 自定义验证器 制定 API 返回结构 废话不多说,咱们开始吧. 规 ...

  7. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  8. [译]MVC网站教程(二):异常管理

    介绍 “MVC网站教程”系列的目的是教你如何使用 ASP.NET MVC 创建一个基本的.可扩展的网站. 1)   MVC网站教程(一):多语言网站框架 2)   MVC网站教程(二):异常管理 3) ...

  9. <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

    MVC 3 数据验证 Model Validation 详解  再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...

随机推荐

  1. IE11 文档模式空白

    环境描述: win7 64位系统 安装了 更新 IE11-Windows6.1-KB2929437-x64.IE11-Windows6.1-KB3008923-x64 解决方案: 卸载 IE11-Wi ...

  2. 携程Apollo(阿波罗)配置中心的Java样例客户端启动和调试

    参考:https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97#23-java%E6%A0 ...

  3. Ubuntu14.04 忘记rootpassword的解决方法

    对于windows操作系统,假设忘记管理员password,事实上还是蛮好解决的. 最简单的一种方式就是使用PE--电脑店,老毛桃等等,都能够非常完美的解决问题. 假设是Linux操作系统的话.事实上 ...

  4. hbase 增删改查 api 简单操作

    package com.utils; import java.io.IOException; import java.util.ArrayList; import java.util.List; im ...

  5. 扩展欧几里得模板&逆元求法

    拓展欧几里得: 当 gcd ( a , b )= d 时,求绝对值和最小的 x , y 使得 x * a + y * b = d : d = gcd ( a , b ) = gcd ( b , a m ...

  6. luogu3899谈笑风生

    https://www.zybuluo.com/ysner/note/1298140 题面 设\(T\)为一棵有根树,我们做如下的定义: 设\(a\)和\(b\)为\(T\)中的两个不同节点.如果\( ...

  7. Face alignment at 3000FPS via Regressing Local Binrary features 理解

    这篇是Ren Shaoqing发表在cvpr2014上的paper,论文是在CPR框架下做的,想了解CPR的同学可以参见我之前的博客,网上有同学给出了code,该code部分实现了LBF,链接为htt ...

  8. 在WIN7里IE8的开发人员工具打不开的解决办法

    IE8新增了开发人员工具,非常不错,比早期的DevToolbar好用多了.不过在我的Win7下使用的时候偶尔会出现一个莫名其妙的问题,就是整个开发人员工具窗口消失了,打不开了.当你使用win+Tab切 ...

  9. mac apache虚拟主机配置

    <VirtualHost *:80>     ServerAdmin slin      DocumentRoot "/Users/slin/work/phpStudy/myPh ...

  10. kernel信息及其相关命令

    内核 linux内核是单内核体系设计.但充分借鉴了微内核设计体系的优点,为内核引入模块化机制 内核组成部分: kernel: 内核核心,一般为bzImage,通常在/boot 目录下,名称为vmlin ...