private IEnumerable <string> GetDisallowedActions()
        {
            var disallows = new List <string>();

            foreach (var controller in Assemblies.SelectMany(asm => asm.GetTypesThatAre <Controller>()).Where(c => !c.HasAttribute <RobotsDisallowAttribute>()))
            {
                var controllerName = controller.Name;
                controllerName = controllerName.Substring(0, controllerName.Length - "Controller".Length);

                var areaName = "";
                // find the area name?
                if (AreaNamespaces.ContainsKey(controller.Namespace))
                {
                    areaName = AreaNamespaces[controller.Namespace];
                }

                foreach (var actionMethod in controller.GetMethods(BindingFlags.Public | BindingFlags.Instance).Where(m => m.HasAttribute <RobotsDisallowAttribute>()))
                {
                    var attr = actionMethod.GetCustomAttribute <RobotsDisallowAttribute>();
                    if (!string.IsNullOrWhiteSpace(attr.Area) && !string.IsNullOrWhiteSpace(areaName))
                    {
                        areaName = attr.Area;
                    }
                    var action = Url.Action(actionMethod.Name, new { controller = controllerName, area = areaName });
                    disallows.Add(action.ToLowerInvariant());
                }
            }
            return(disallows);
        }
        private IEnumerable <string> GetDisallowedRegisteredAreas()
        {
            var disallows = new List <string>();

            foreach (var area in Assemblies.SelectMany(asm => asm.GetTypesThatAre <AreaRegistration>()).Where(t => t.HasAttribute <RobotsDisallowAttribute>()))
            {
                var instance = (AreaRegistration)Activator.CreateInstance(area);
                var url      = Url.Action("", new { controller = "", area = instance.AreaName });
                AreaNamespaces.Add(area.Namespace, instance.AreaName);
                disallows.Add(url.ToLowerInvariant());
            }
            return(disallows);
        }
        private IEnumerable <string> GetDisallowedControllers()
        {
            var disallows = new List <string>();

            foreach (var controller in Assemblies.SelectMany(asm => asm.GetTypesThatAre <Controller>()).Where(c => c.HasAttribute <RobotsDisallowAttribute>()))
            {
                var controllerName = controller.Name;
                var attr           = controller.GetCustomAttribute <RobotsDisallowAttribute>();
                controllerName = controllerName.Substring(0, controllerName.Length - "Controller".Length);
                var areaName = attr.Area;
                // find the area name?
                if (AreaNamespaces.ContainsKey(controller.Namespace))
                {
                    areaName = AreaNamespaces[controller.Namespace];
                }

                var url = Url.Action("", new { controller = controllerName, area = areaName });
                disallows.Add(url.ToLowerInvariant());
            }
            return(disallows);
        }