1.ControllerDescriptor

  1.1 ReflectedControllerDescriptor

    

 public class HomeController : Controller
{
public ActionResult Index()
{
ReflectedControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(typeof(HomeController));
return View(controllerDescriptor.GetCanonicalActions());
} public void Action1()
{ } public static void Action2()
{ } private void Action3()
{ } public void Action4<T>()
{ } public void Action5(ref object obj)
{ } public void Action6(out object obj)
{
obj = null;
}
}

显示效果

1 Index
2 Action1

有效的Action方法必要条件:方法所在类型必须继承抽象类ControllerBase,而不是IController接口

public class HomeController : IController
{
public void ValidAction()
{
} public void Execute(RequestContext requestContext)
{
this.ListValidActions(requestContext);
} private void ListValidActions(RequestContext requestContext)
{
ReflectedControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(typeof(HomeController));
ActionDescriptor[] actionDescriptors = controllerDescriptor.GetCanonicalActions();
if (actionDescriptors.Any())
{
foreach (ActionDescriptor actionDescriptor in actionDescriptors)
{
requestContext.HttpContext.Response.Write(actionDescriptor.ActionName + "<br/>");
}
}
else
{
requestContext.HttpContext.Response.Write("无合法的Action方法");
}
}
}

  无合法的Action方法

有效的Action方法必须继承自ControllerBase

 public class HomeController : ControllerBase
{
public void ValidAction()
{
} protected override void ExecuteCore()
{
this.ListValidActions(this.ControllerContext.RequestContext);
} private void ListValidActions(RequestContext requestContext)
{
ReflectedControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(typeof(HomeController));
ActionDescriptor[] actionDescriptors = controllerDescriptor.GetCanonicalActions();
if (actionDescriptors.Any())
{
foreach (ActionDescriptor actionDescriptor in actionDescriptors)
{
requestContext.HttpContext.Response.Write(actionDescriptor.ActionName + "<br/>");
}
}
else
{
requestContext.HttpContext.Response.Write("无合法的Action方法");
}
}
}

输出结果:ValidAction

ReflectedControllerDescriptor的GetCanonicalActions方法具有缓存功能。第一次调用GetCanonicalActions方法返回的ActionDescriptor列表会被缓存起来作为后续调用的返回值

MVC 3个重要的描述对象之ControllerDescriptor的更多相关文章

  1. Asp.net MVC中三大描述对象之ActionDescriptor 以及继承类ReflectedControllerDescriptor

    ActionDescriptor抽象类中几个基本的属性: ControllerName:被描述的Controller名称,去除后缀Controller的名称.例如:HomeController则为Ho ...

  2. HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象

    HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...

  3. (74)Wangdao.com第十三天_Object 对象_属性描述对象

    Object 对象 JavaScript 原生提供 Object 对象 JavaScript 的所有其他对象都继承自  Object 对象,即那些对象都是Object的实例 Object 对象的原生方 ...

  4. Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色

    通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Tiles.iText和POI.Spring MVC 框架 ...

  5. javascript中的描述对象(Descriptor)

    对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为.Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象. 获取对象中属性描述对象 Ob ...

  6. javascript中的描述对象(Descriptor)获取和定义随笔

    最近再看了阮一峰的老师的ES6入门,发现一个有趣的东西,借此纪录以及整理下. 对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为.Object.getOwnPropertyD ...

  7. MVC描述对象的类关系图/调用关系图【学习笔记】

  8. 在Visual Studio中使用序列图描述对象之间的互动

    当需要描述多个对象之间的互动,可以考虑使用序列图. 在建模项目下添加一个名称为"Basic Flow"的序列图. 比如描述客户是如何在MVC下获取到视图信息的. 备注: ● 通常是 ...

  9. spring mvc 控制器方法传递一些经验对象的数组

    由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstru ...

随机推荐

  1. python一个注意的地方

    https://www.zhihu.com/question/25874136 class test: l=[] def init(self): self.l=['1','2','7'] a1=tes ...

  2. (二)miller指导查看主控板寄存器操作

    Welcome to Command Shell!Username:admin Password:***** ROS>en ROS# ROS# ROS# ROS# ROS#^ada ROS(ad ...

  3. 5.6 a、b交换

    答案:int max = ((a+b)+abs(a-b))/2;

  4. 转:内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]

    内存区划分.内存分配.常量存储区.堆.栈.自由存储区.全局区[C++][内存管理][转载] 一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放 ...

  5. 使用Python获取Linux系统的各种信息

    哪个Python版本? 当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 (3.3)上是不工作的,以及提供一份解释不同之处的备选代码 ...

  6. task-clph

    @UI方面 1 UILabel如果没有text内容,那么无论你怎么设置背景色都没用 UIButton就都可以用 2使用了新控件:UIStackView 使用步骤: //1创建 _horizontalS ...

  7. 修改Mac]Bringing interface etch0:Device

    OS版本:Red Hat Enterprise Linux AS4/5 网上有很多关于linux下修改MAC地址的方法,大多依葫芦画瓢,似乎都没验证过,达不到修改的目的. 经过我的详细测试,最终成功解 ...

  8. jsp 页面 性别回显

    采用ognl的方式来获取 <tr> <td>性别</td> <td><s:radio name="gender" list=& ...

  9. 自己动手做jQuery插件

    前言:这种东西随意可以在网上收到,这里我还是只是记下自己的见解和领. 第一种方式 (function ($) { $.extend({ sayHello: function (name) { aler ...

  10. 向html中添加节点

    简单: ①,js中: (function () { var box=document.querySelector("#box"); var con1=document.create ...