zoukankan      html  css  js  c++  java
  • .net 用反射获取当前运行的程序集中的所有Controller与Action

    public string InitPermission()
            {
                // 通过反射加载程序集
                // var baseType = Assembly.LoadFile(@"G:	estprojectConsoleApp28WebApplication1inWebApplication1.dll");
    
                // 获取当前运行的程序集的反射对象
                var assembly = System.Reflection.Assembly.GetExecutingAssembly();
    
                List<Permission> permissions = new List<Permission>();
    
                // 所有类型的集合
                foreach (var type in assembly.GetTypes())
                {
                    // 不属于controller的跳过
                    if (!typeof(IController).IsAssignableFrom(type))
                    {
                        continue;
                    }
                    
                    // 处理Areas,无法直接获取到区域名称,只能根据命名空间处理
                    string[] namespaceSplit = type.Namespace.Split('.');
    
                    Dictionary<string, int> dic = new Dictionary<string, int>();
    
                    // 获取区域名称,限制Areas后面跟区域,不允许再深入
                    string areaName = string.Empty;
    
                    for (int i = 0; i < namespaceSplit.Length; i++)
                    {
                        if (namespaceSplit[i] == "Areas")
                        {
                            areaName = namespaceSplit[i + 1];
                        }
                    }
    
                    string controllerName = type.Name.Replace("Controller","");
    
                    var members = type.GetMembers();
    
                    foreach (var member in members)
                    {
                        // 不是方法时,跳过
                        if (member.MemberType != MemberTypes.Method)
                        {
                            continue;
                        }
    
                        // member.ReturnType,调试时可以看到,但实际是没有ReturnType属性的,所以采用以下判断
                        // 方法返回值为Void的跳过
                        if (member.ToString().IndexOf("Void") == 0)
                        {
                            continue;
                        }
    
                        Permission permission = new Permission();
                        permission.AreaName = areaName;
                        permission.ControllerName = controllerName;
                        permission.ActionName = member.Name;
    
                        permission.PermissionCode = Transfer.GetUniqueID();
    
                        permission.CreateTime = DateTime.Now;
                        permission.UpdateTime = DateTime.Now;
    
                        permissions.Add(permission);
                    }
                }
    
                MyWebCache.InsertPermissions(permissions);
    
                return ToJson(permissions);
            }
    

      

  • 相关阅读:
    技巧 |excel 趋势线公式中的x取什么
    区别 |Python str.split()和re.split()
    案例 |思路| 年度KPI如何制定?
    区别 |时间序列vs线性回归
    数据分析师如何构建自己的 IP(网气)影响力
    RabbitMQ学习整理笔记一
    nginx学习资料整理一
    Redis 学习笔记一
    Springboot 内置tomcat 基本配置收集整理
    Spring Cloud 学习笔记一
  • 原文地址:https://www.cnblogs.com/zhoushangwu/p/12378166.html
Copyright © 2011-2022 走看看