zoukankan      html  css  js  c++  java
  • C#获取类以及类下的方法(用于Asp.Net MVC)

    在开发MVC项目中遇到的问题,做权限控制时,通过MVC的过滤器来实现,所以在分配权限时希望获取到所有的控制器和Action方法,通过查找资料,参考了《Asp.Net MVC框架揭秘》,最终实现。

    在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection。

    public ActionResult GetControllerAndAction()
          List<Type> controllerTypes = new List<Type>();    //创建控制器类型列表
       var assembly = Assembly.Load("MySoft.UI");    //加载程序集
       controllerTypes.AddRange(assembly.GetTypes().Where(type => typeof(IController).IsAssignableFrom(type) && type.Name!="ErrorController"));    //获取程序集下所有的类,通过Linq筛选继承IController类的所有类型
       StringBuilder jsonBuilder = new StringBuilder();    //创建动态字符串,拼接json数据    注:现在json类型传递数据比较流行,比xml简洁
       jsonBuilder.Append("[");
       foreach (var controller in controllerTypes)//遍历控制器类
       {
           jsonBuilder.Append("{"controllerName":"");
          jsonBuilder.Append(controller.Name);
           jsonBuilder.Append("","controllerDesc":"");
           jsonBuilder.Append((controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)==null?"" : (controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description);    //获取对控制器的描述Description
           jsonBuilder.Append("","action":[");
           var actions = controller.GetMethods().Where(method => method.ReturnType.Name == "ActionResult");    //获取控制器下所有返回类型为ActionResult的方法,对MVC的权限控制只要限制所以的前后台交互请求就行,统一为ActionResult
           foreach (var action in actions)
           {
               jsonBuilder.Append("{"actionName":"");
               jsonBuilder.Append(action.Name);
               jsonBuilder.Append("","actionDesc":"");
               jsonBuilder.Append((action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute) == null ? "" : (action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description);    //获取对Action的描述
               jsonBuilder.Append(""},");
           }
           jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
           jsonBuilder.Append("]},");
       }
       jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
       jsonBuilder.Append("]");
           return Content(jsonBuilder.ToString(),"json/text");t"); 
    作者:Aleen Pan
    出处:http://panxiangfu.cnblogs.com/
    如果您觉得本文对您的学习有所帮助,可通过“微信”或“支付宝”打赏博主,或者点击页面右下角【好文要顶】支持博主。
  • 相关阅读:
    day08,文件操作。
    day07,基础数据部分的补充
    day06,1,小数据池,常量池。2,编码。
    day05,字典(dic)
    day04,1列表,2列表的增删改查,3列表的嵌套,4元祖,
    day03:python基础数据类型操作(索引,切片,迭代)
    day02_while循环 ,运算符,格式化输出
    变量的命名规则
    Day-23 基础模块4 模块导入_包
    Day-22 基础模块3 正则表达式_re模块
  • 原文地址:https://www.cnblogs.com/panxiangfu/p/5541103.html
Copyright © 2011-2022 走看看