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); }