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

  • 相关阅读:
    Django 点滴
    Django 用 userena 做用户注册验证登陆
    screen 基础用法(转)
    yum 常用命令
    利用 awk 将当前的链接按端口汇总倒排序
    Django 的逆向解析url(转)
    Ubuntu 安装 setuptools
    支付宝 python alipay 集成(转)
    linux 下批量在多文件中替换字符串
    springmvc进阶
  • 原文地址:https://www.cnblogs.com/kingCpp/p/4526951.html
Copyright © 2011-2022 走看看