using Microsoft.AspNetCore.Mvc; using PSTW_CentralSystem.DBContext; using System.Reflection; namespace PSTW_CentralSystem.Controllers.API { [ApiController] [Route("[controller]")] public class AdminAPI : Controller { private readonly ILogger _logger; private readonly AuthDBContext _authDbContext; public AdminAPI(ILogger logger, AuthDBContext authDbContext) { _logger = logger; _authDbContext = authDbContext; } [HttpPost("GetClassAndMethodInformation")] public async Task GetClassAndMethodInformation(string moduleName) { var controllerAndMethodList = new object(); // Get the assembly containing the controllers var assembly = Assembly.GetExecutingAssembly(); // Get all types in the assembly (controllers will typically be in the "Controllers" namespace) //var controllerTypes = await Task.Run(() => assembly.GetTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type) && type.IsClass && type.Name.Contains("Controller") && type.Name != "AdminController") .ToList()); var controllerTypes = await Task.Run(() => assembly.GetTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type) && type.IsClass && type.Name.Contains(moduleName)).FirstOrDefault()); // Iterate over the controller types and get their methods var methods = controllerTypes?.GetMethods(BindingFlags.Public | BindingFlags.Instance) .Where(m => m.DeclaringType == controllerTypes) // Filter methods declared directly in the controller (ignoring inherited ones) .Select(m => m.Name) // Get the method names .ToList(); controllerAndMethodList = (new { Controller = controllerTypes?.Name, Methods = methods }); // Return the list as JSON return Json(controllerAndMethodList); } [HttpPost("GetListClassAndMethodInformation")] public async Task GetListClassAndMethodInformation() { var controllerAndMethodList = new List(); // Get the assembly containing the controllers var assembly = Assembly.GetExecutingAssembly(); // Get all types in the assembly (controllers will typically be in the "Controllers" namespace) //var controllerTypes = await Task.Run(() => assembly.GetTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type) && type.IsClass && type.Name.Contains("Controller") && type.Name != "AdminController") .ToList()); var controllerTypes = await Task.Run(() => assembly.GetTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type) && type.IsClass && !type.Name.Contains("API") && !type.Name.Contains("Admin")).ToList()); // Iterate over the controller types and get their methods foreach (var controllerType in controllerTypes) { var methods = controllerType?.GetMethods(BindingFlags.Public | BindingFlags.Instance) .Where(m => m.DeclaringType == controllerType) // Filter methods declared directly in the controller (ignoring inherited ones) .Select(m => m.Name) // Get the method names .ToList(); controllerAndMethodList.Add(new { Controller = controllerType?.Name, Methods = methods }); } // Return the list as JSON return Json(controllerAndMethodList); } } }