标签:
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
标签:
原文地址:http://www.cnblogs.com/kingCpp/p/4526951.html