• C#获取类以及类下的方法(用于Asp.Net MVC)


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

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

     1     public ActionResult GetControllerAndAction()
     2         List<Type> controllerTypes = new List<Type>();    //创建控制器类型列表
     3      var assembly = Assembly.Load("MySoft.UI");    //加载程序集
     4      controllerTypes.AddRange(assembly.GetTypes().Where(type => typeof(IController).IsAssignableFrom(type) && type.Name!="ErrorController"));    //获取程序集下所有的类,通过Linq筛选继承IController类的所有类型
     5      StringBuilder jsonBuilder = new StringBuilder();    //创建动态字符串,拼接json数据    注:现在json类型传递数据比较流行,比xml简洁
     6      jsonBuilder.Append("[");
     7      foreach (var controller in controllerTypes)//遍历控制器类
     8      {
     9          jsonBuilder.Append("{"controllerName":"");
    10          jsonBuilder.Append(controller.Name);
    11           jsonBuilder.Append("","controllerDesc":"");
    12           jsonBuilder.Append((controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)==null?"" : (controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description);    //获取对控制器的描述Description
    13           jsonBuilder.Append("","action":[");
    14           var actions = controller.GetMethods().Where(method => method.ReturnType.Name == "ActionResult");    //获取控制器下所有返回类型为ActionResult的方法,对MVC的权限控制只要限制所以的前后台交互请求就行,统一为ActionResult
    15           foreach (var action in actions)
    16           {
    17               jsonBuilder.Append("{"actionName":"");
    18               jsonBuilder.Append(action.Name);
    19               jsonBuilder.Append("","actionDesc":"");
    20               jsonBuilder.Append((action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute) == null ? "" : (action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description);    //获取对Action的描述
    21               jsonBuilder.Append(""},");
    22           }
    23           jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
    24           jsonBuilder.Append("]},");
    25       }
    26       jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
    27       jsonBuilder.Append("]");
    28       return Content(jsonBuilder.ToString(),"json/text");t"); 
  • 相关阅读:
    Python笔记 —— 使用open打开和操作txt文件
    Python笔记 —— 文件路径
    Python笔记 —— 四种容器(列表,元组,字典,集合)
    C++笔记 —— 异常
    C++笔记 —— map常用方法
    C++笔记 —— 在模板类中重载操作符
    C++笔记 —— vector常用方法
    C++笔记 —— 强制类型转换
    TCP连接三次握手四次挥手
    HashMap中自定义对象key,实现hashcode与equal
  • 原文地址:https://www.cnblogs.com/FateNight/p/4237393.html
Copyright © 2020-2023  润新知