ASP.NET MVC三个重要的描述对象:ParameterDescriptor
Model绑定是为作为目标Action的方法准备参数列表的过程,所以针对参数的描述才是Model绑定的核心。在ASP.NET MVC应用编程接口中,服务于Model绑定的参数元数据通过ParameterDescriptor类型来表示,而ActionDescriptor的GetParameters方法返回的就是一个ParameterDescriptor数组。
如下面的代码片断所示,ParameterDescriptor同样实现了ICustomAttributeProvider接口提供应用在相应参数上的特性。ParameterDescriptor的只读属性ActionDescriptor表示描述所在Action方法的ActionDescriptor对象。属性ParameterName、ParameterType和DefaultValue分别表示参数的名称、类型和默认值。
1: public abstract class ParameterDescriptor : ICustomAttributeProvider
4: public virtual object[] GetCustomAttributes(Type attributeType, bool inherit);
ParameterDescriptor的只读属性BindingInfo表示的System.Web.Mvc.ParameterBindingInfo对象封装一些信息用于控制请求数据与参数的绑定行为。如下面的代码片断所示,抽象类ParameterBindingInfo具有四个属性,其中类型为IModelBinder的Binder属性返回的ModelBinder对象是整个Model绑定的核心,我们将在本章后续部分进行单独介绍。
如果参数类型是一个复杂类型,默认情况下会绑定其所有公共可读写属性,而两个ICollection string 类型的属性Include和Exclude表示显示设置的参与/不参与绑定的属性名称列表。在默认情况下,请求数据与参数之间严格按照名称进行绑定,但是有时候请求数据名称具有相应的前缀,这个前缀体现在ParameterBindingInfo的Prefix属性上。
ReflectedParameterDescriptor原生的ParameterBindingInfo是通过针对表示参数的ParameterInfo进行反射获得,这样的ParameterBindingInfo通过ReflectedParameterDescriptor类型表示。如下面的代码片断所示,这个ParameterInfo对象通过只读属性ParameterInfo表示,并在构造函数中被初始化。
3: public ReflectedParameterDescriptor(ParameterInfo parameterInfo, ActionDescriptor actionDescriptor);
5: public override object[] GetCustomAttributes(Type attributeType, bool inherit);
ReflectedParameterDescriptor的BindingInfo属性返回的是一个ReflectedParameterBindingInfo对象,这是一个内部类型。该BindingInfo的Include、Exclude和Prefix属性来源于对应用在参数上的BindAttribute特性的解析。如下面的代码片断所示,BindAttribute中同样定义了这三个属性,其中Include和Exclude为通过逗号作为分隔符的属性名称列表。
1: [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Class, AllowMultiple=false, Inherited=true)]
布尔返回类型的IsPropertyAllowed方法用于判断指定的属性是否允许绑定,当指定在属性名在Include列表中(或者Include列表为空)并且不在Exclude列表的情况下返回True,否则返回False。
ASP.NET MVC三个重要的描述对象:ControllerDescriptor
ASP.NET MVC三个重要的描述对象:ActionDescriptor
ASP.NET MVC三个重要的描述对象:ControllerDescriptor与ActionDescriptor的创建机制
ASP.NET MVC三个重要的描述对象:ParameterDescriptor
微信公众账号:大内老A
微博:www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 原文链接
Asp.Net SignalR Hub中的上下文对象 原文:Asp.Net SignalR Hub中的上下文对象 Hub中的 Context 使用了集线器后,会发现对比持久连接类少了OnConnectioned这样的事件,事实上是有的。需要我们去override .
以本系列文章向Fish 前辈的那篇我心中的ASP.NET 核心对象致敬。(虽然不知道前辈现在在干什么)。一晃就6年过去了,那首 郝云 的《回到那一天》怎么唱来着? 时光一晃,你就三十了。 而我们都变成了老了的程序员
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题) 立即下载
相关文章
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-> “Tab”标签新增可“最大化”显示功能
- RDIFramework.NET平台代码生成器V2.8发布-更新于2014-12-31(提供下载)
- Asp.Net_Mvc4_mvc4跟mysql语法
- ASP.NET MVC下使用AngularJs语言(一):Hello your name
- ASP.NET MVC图片管理(上传,预览与显示)
- ASP.NET MVC提交一个较复杂对象至WCF Service
- ASP.NET WEB API 中的路由调试与执行过程跟踪
- ASP.NET CORE读取appsettings.json的配置
- Asp.net core (学习笔记 路由和语言 route & language)
- ASP.NET#使用母版时,如果要使用js中的getElementById()方法取得某个内容页的元素时要注意的问题
- Asp.Net生命周期
- ASP.NET并发处理
- Wix安装程序中判断是否安装的.net framwork 4.5
- 图文详解远程部署ASP.NET MVC 5项目
- 微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战
- ASP.NET Core PartialAsync方法的使用说明
- .NET Core和ASP.NET Core 日志框架Nlog安装配置及示例代码
- ASP.NET Core的路由[2]:路由系统的核心对象——Router
- ASP.NET Core的配置(3): 将配置绑定为对象[下篇]
- ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[上篇]
- ASP.NET MVC三个重要的描述对象:ControllerDescriptor
- ASP.NET MVC中使用FluentValidation验证实体
- ASP.NET【1】
- 秒懂ASP.NET中的内置对象