天天看点

ASP.NET MVC三个重要的描述对象:ControllerDescriptor一、ControllerDescriptor二、ReflectedControllerDescriptor三、ReflectedAsyncControllerDescriptor

ASP.NET

MVC应用的请求都是针对某个Controller的某个Action方法,所以对请求的处理最终体现在对目标Action方法的执行。而Action方法具有相应的参数,所以在方法执行之前必须根据相应的规则从请求中提取相应的数据并将其转换为Action方法参数列表,我们将这个过程称为Model绑定。在ASP.NET

ControllerDescriptor包含了用于描述某个Controller的元数据信息。如下面的代码片断所示,ControllerDescriptor具有三个属性,其中ControllerName和ControllerType分别表示Controller的名称和类型,前者来源于路由信息;字符串类型的UniqueId表示ControllerDescriptor的唯一标识,该标识由自身的类型、Controller的类型以及Controller的名称三者派生。

ControllerDescriptor的FindAction方法根据指定的Controller上下文和名称得到相应的Action方法,返回的是用于描述Action方法的ActionDescriptor对象。而GetCanonicalActions得到当前Controller的所有Action方法,返回类型为ActionDescriptor数组。

的Action选择规则,我们也可以通过自定义ActionNameSelectorAttribute特性的方式来实现。

ReflectedAsyncControllerDescriptor的GetCanonicalActions总是返回一个空的ActionDescriptor数组。对于继承自AsyncController的Controller类型,一个异步Action方法由两个匹配的方法({ActionName}Async和{ActionName}Completed)构成,ReflectedAsyncControllerDescriptor在根据指定的Action名称对方法成员进行匹配的时候会自动忽略掉方法名称的“Async”和“Completed”后缀。

<a href="http://www.cnblogs.com/artech/archive/2012/05/10/controller-descriptor.html">ASP.NET MVC三个重要的描述对象:ControllerDescriptor</a>

<a href="http://www.cnblogs.com/artech/archive/2012/05/10/action-descriptor.html">ASP.NET MVC三个重要的描述对象:ActionDescriptor</a>

<a href="http://www.cnblogs.com/artech/archive/2012/05/11/controller-descriptor-and-action-descriptor-creation.html">ASP.NET MVC三个重要的描述对象:ControllerDescriptor与ActionDescriptor的创建机制</a>

<a href="http://www.cnblogs.com/artech/archive/2012/05/13/parameter-descriptor.html">ASP.NET MVC三个重要的描述对象:ParameterDescriptor</a>

作者:蒋金楠

微信公众账号:大内老A

如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

<a href="http://www.cnblogs.com/artech/archive/2012/05/10/controller-descriptor.html" target="_blank">原文链接</a>