/// <summary> /// 初始化系统菜单 /// </summary> private void InitSysMenus(string controllerAssemblyName) { var assembly = Assembly.Load(controllerAssemblyName); var types = assembly?.GetTypes(); var list = types?.Where(t => !t.IsAbstract && t.IsPublic && t.IsSubclassOf(typeof(Controller))).ToList(); if (list != null) { foreach (var type in list) { var controllerName = type.Name.Replace("Controller", ""); var methods = type.GetMethods().Where(m => m.IsPublic && (m.ReturnType == typeof(IActionResult) || m.ReturnType == typeof(Task <IActionResult>))); var parentIdentity = $"{controllerName}"; if (menuRepository.Count(m => m.Identity.Equals(parentIdentity, StringComparison.OrdinalIgnoreCase)) == 0) { menuRepository.Add(new SysMenu() { MenuName = type.GetCustomAttribute <ControllerDescriptionAttribute>()?.Name ?? parentIdentity, Activable = true, Visiable = true, Identity = parentIdentity, RouteUrl = "", ParentId = String.Empty }); } foreach (var method in methods) { var identity = $"{controllerName}/{method.Name}"; if (menuRepository.Count(m => m.Identity.Equals(identity, StringComparison.OrdinalIgnoreCase)) == 0) { menuRepository.Add(new SysMenu() { MenuName = method.GetCustomAttribute <ActionDescriptionAttribute>()?.Name ?? method.Name, Activable = true, Visiable = method.GetCustomAttribute <AjaxRequestOnlyAttribute>() == null, Identity = identity, RouteUrl = identity, ParentId = identity.Equals(parentIdentity, StringComparison.OrdinalIgnoreCase) ? String.Empty : menuRepository.GetSingleOrDefault(x => x.Identity == parentIdentity)?.Id }); } } } } }
public IActionResult Post([FromBody] sys_menu value) { var oldSysMenu = _sysMenuRpt.FindBy(f => f.MenuName == value.MenuName); if (oldSysMenu.Any()) { return(BadRequest(string.Concat(value.MenuName, "已经存在。"))); } value.CreatedAt = DateTime.Now; value.UpdatedAt = DateTime.Now; value.IsValid = true; _sysMenuRpt.Add(value); using (var tran = _context.Database.BeginTransaction()) { try { _sysMenuRpt.Commit(); this.SetMenuRoles(value); tran.Commit(); } catch (Exception e) { Console.WriteLine(e); tran.Rollback(); return(new BadRequestResult());; } } return(new OkObjectResult(value)); }