Пример #1
0
        public MvcActionsDiscoveryService(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
        {
            actionDescriptorCollectionProvider.CheckArgumentIsNull(nameof(actionDescriptorCollectionProvider));

            MvcControllers = new List <MvcControllerViewModel>();

            var lastControllerName = string.Empty;
            MvcControllerViewModel currentController = null;

            var actionDescriptors = actionDescriptorCollectionProvider.ActionDescriptors.Items;

            foreach (var actionDescriptor in actionDescriptors)
            {
                var descriptor = actionDescriptor as ControllerActionDescriptor;
                if (descriptor == null)
                {
                    continue;
                }

                var controllerTypeInfo = descriptor.ControllerTypeInfo;
                var actionMethodInfo   = descriptor.MethodInfo;

                if (lastControllerName != descriptor.ControllerName)
                {
                    currentController = new MvcControllerViewModel
                    {
                        AreaName              = controllerTypeInfo.GetCustomAttribute <AreaAttribute>()?.RouteValue,
                        ControllerAttributes  = getAttributes(controllerTypeInfo),
                        ControllerDisplayName = controllerTypeInfo.GetCustomAttribute <DisplayNameAttribute>()?.DisplayName,
                        ControllerName        = descriptor.ControllerName,
                    };
                    MvcControllers.Add(currentController);

                    lastControllerName = descriptor.ControllerName;
                }

                currentController?.MvcActions.Add(new MvcActionViewModel
                {
                    ControllerId      = currentController.ControllerId,
                    ActionName        = descriptor.ActionName,
                    ActionDisplayName = actionMethodInfo.GetCustomAttribute <DisplayNameAttribute>()?.DisplayName,
                    ActionAttributes  = getAttributes(actionMethodInfo),
                    IsSecuredAction   = isSecuredAction(controllerTypeInfo, actionMethodInfo)
                });
            }
        }