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

  • 相关阅读:
    libevent库的使用方法
    libevent中定时器的使用方法
    最小二乘原理(1)——线性等权重最小二乘
    E: Could not get lock /var/lib/dpkg/lock-frontend
    Ubuntu 18.04源码编译安装OpenCV 4.0步骤
    基于Socket和OpenCV的实时视频传输
    Jetson Nano系列教程3:GPIO
    Jetson Nano 系列教程2:串口调试接口登录Jetson Nano
    推荐 5 款牛逼的代码编辑器
    spring-boot-run 指令是怎么运行 Spring Boot 项目的?
  • 原文地址:https://www.cnblogs.com/kingCpp/p/4526951.html
Copyright © 2011-2022 走看看