zoukankan      html  css  js  c++  java
  • MVC 3个重要的描述对象之ControllerDescriptor

    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列表会被缓存起来作为后续调用的返回值

  • 相关阅读:
    网上邻居无法打开的问题 客户端无法连接打印机问题
    今天一天下午到晚上都在研究如何刷手机,要是被领导知道我帮同学在刷手机系统,非开除我不可。还是贴出来,以后少走弯路吧
    “屏幕保护程序”没有出现“在恢复时使用密码保护”的解决方法
    NOD 32客户端安装时出现的问题
    [模板]二叉树的前、中、后序遍历
    [算法]浅谈求n范围以内的质数(素数)
    [模板]二叉搜索树
    [OI]Noip 2018 题解&总结(普及)
    Centos7.2安装git(源码安装)
    Centos7.2安装maven
  • 原文地址:https://www.cnblogs.com/kingCpp/p/4526951.html
Copyright © 2011-2022 走看看