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

  • 相关阅读:
    json
    用data的方法获取值的时候,要注意的问题一定要在先封装好
    勾选框图片代替,两张图片进行切换
    Google统计
    1,全局变量;2,图形验证码;3,解决bug的毅力
    怎么快速写好看的手机menu菜单
    用css、如何让图片自动适应屏幕大小,不出现滚动条,不变形,兼容各个浏览器?急!!!
    怎么安装mybatis以及快速生成xml文件
    mysql连接数据库时报2003错误怎么解决
    屏幕的遮挡层,js得到屏幕宽高、页面宽高 (window.screen.availHeight)等--
  • 原文地址:https://www.cnblogs.com/kingCpp/p/4526951.html
Copyright © 2011-2022 走看看