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