.net 用反射获取当前运行的程序集中的所有Controller与Action
public string InitPermission()
{
// 通过反射加载程序集
// var baseType = Assembly.LoadFile(@"G:\testproject\ConsoleApp28\WebApplication1\bin\WebApplication1.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);
}
.net 用反射获取当前运行的程序集中的所有Controller与Action的更多相关文章
- Android 5.0以上获取系统运行进程信息
在Android 5.0以上系统,调用getRunningAppProcesses 方法返回的列表为空,这是因为谷歌考虑到安全原因,已经把这个方法移除掉了, 那以后要获取系统运行的后台进程这个方法用不 ...
- Android中获取正在运行的应用程序-----ActivityManager.RunningAppProcessInfo类详解
今天继续讲解关于ActivityManager的使用,通过前面一节的学习,我们学会了如何利用ActivityManager获取系统里 正在运行的进程.本文要讲解的知识点是利用这些进程信息获取系统里正在 ...
- C# 获取当前服务器运行程序的根目录,获取当前运行程序物理路径
C# 获取当前服务器运行程序的根目录,获取当前运行程序物理路径 string tmpRootDir = AppDomain.CurrentDomain.BaseDirectory;//获得当前服务器程 ...
- Windows/Linux获取当前运行程序的绝对路径
windows 获取当前运行程序的绝对路径(.exe) GetModuleFileNameA()函数获取绝对路径,不过文件路径中的反斜杠需要进行替换. ]; GetModuleFileNameA(NU ...
- 通过反射获取class文件中的构造方法,运行构造方法
/* * 通过反射获取class文件中的构造方法,运行构造方法 * 运行构造方法,创建对象 * 1.获取class文件对象 * 2.从class文件对象中,获取需要的成员 * * Constructo ...
- c#获取当前运行程序所在的目录
C#获取项目程序及运行路径的方 1.asp.net webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“\”: 2.c# wi ...
- JAVA自定义注解 和 运行时靠 反射获取注解,解决 shiro 注解型权限因子获取问题
项目的权限分配,采用的是RBAC的设计模式.后台配置权限的时候,需要获取到所有的权限因子. 不经让我想起YII框架的SRBAC模块,还有以前的一个ecshop改造系统的权限配置方式,都采用的是PHP的 ...
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...
- c#反射机制学习和利用反射获取类型信息
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
随机推荐
- CQOI十二省联考游记
Day 0 看似稳如老狗的我实则慌得一逼 看了一上午的CRT,一个字没看进去 我反复安慰自己:我才高一,我才高一 但是,明年的联赛会不会跟今年一样高呢? 明年的心态会不会有现在这么好呢? 明年同届的d ...
- 团队项目—Beta版本冲刺3
博客介绍 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https://w ...
- printf 函数笔记
函数声明 int printf (const char*, ...); 说明 <返回值> printf ("<格式化字符串>", <参数表>); ...
- SpringBoot任务篇Ⅴ --- 异步任务、定时任务、邮件任务
Java的任务在项目中需要用到的地方很多,比如,每月月末的财务报表给财务部门,定时给领导发个邮件短信等等.这时候我们就需要用到任务了,任务调度本身涉及到多线程并发.运行时间规则制定和解析.场景保持与恢 ...
- QtGui实现计算圆的面积
dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QtWidgets/QDialog> #include <QtWidgets ...
- 《windows程序设计》第三章学习心得
第三章是基于对一个windows窗口的学习,来达到对windows程序运行机制的理解. 从语言的角度看消息机制,Windows给程序发消息的本质就是调用"窗口过程"函数. Don' ...
- [terminal]终端仿真程序
char * szCommAry[COMM_NUM]={ //屏幕属性命令,23 "\x1b[12h",//禁止本端回显,键盘数据仅送给主机 "\x1b[12l" ...
- POJ_1222_高斯消元
题目描述: 每组数据给出一个5*6的0 1矩阵,每次操作可以把某个位置及其四周的位置0 1置换,要求输出操作位置的矩阵. 思路: 每个位置操作2次则等于没有操作,所以每个位置有操作和不操作两种选择,爆 ...
- 基于MXNet的im2rec.py的debug
1.im2rec.py调试错误:multiprocessing not available, fall back to single threaded encoding imread 经过查找发现是程 ...
- spring中获取bean的方式
获取bean的方式 1.可以通过上下文的getBean方法 2.可以通过@Autowired注入 定义controller @RestController @RequestMapping(" ...