Пример #1
0
        /// <summary>
        /// Create a catch all constraint for the given key.
        /// </summary>
        /// <param name="routeKey">Route key.</param>
        /// <returns>a <see cref="RouteDataActionConstraint"/> that represents a catch all constraint.</returns>
        public static RouteDataActionConstraint CreateCatchAll(string routeKey)
        {
            var c = new RouteDataActionConstraint(routeKey);
            c.KeyHandling = RouteKeyHandling.CatchAll;
            c.RouteValue = string.Empty;

            return c;
        }
        public void RouteDataActionConstraint_RequireKeyByPassingNonEmpty()
        {
            var routeDataConstraint = new RouteDataActionConstraint("key", "value");

            Assert.Equal(routeDataConstraint.RouteKey, "key");
            Assert.Equal(routeDataConstraint.KeyHandling, RouteKeyHandling.RequireKey);
            Assert.Equal(routeDataConstraint.RouteValue, "value");
        }
        public void RouteDataActionConstraint_DenyKeyByPassingNull()
        {
            var routeDataConstraint = new RouteDataActionConstraint("key", null);

            Assert.Equal(routeDataConstraint.RouteKey, "key");
            Assert.Equal(routeDataConstraint.KeyHandling, RouteKeyHandling.DenyKey);
            Assert.Equal(routeDataConstraint.RouteValue, string.Empty);
        }
Пример #4
0
        /// <summary>
        /// Create a catch all constraint for the given key.
        /// </summary>
        /// <param name="routeKey">Route key.</param>
        /// <returns>a <see cref="RouteDataActionConstraint"/> that represents a catch all constraint.</returns>
        public static RouteDataActionConstraint CreateCatchAll(string routeKey)
        {
            var c = new RouteDataActionConstraint(routeKey);

            c.KeyHandling = RouteKeyHandling.CatchAll;
            c.RouteValue  = string.Empty;

            return(c);
        }
        private IEnumerable<ActionDescriptor> GetActions(Type type)
        {
            var prototype = (MvcModule)ActivatorUtilities.CreateInstance(_services, type);

            int i = 0;
            foreach (var action in prototype.Actions)
            {
                var filters = type.GetTypeInfo()
                    .GetCustomAttributes(inherit: true)
                    .OfType<IFilterMetadata>()
                    .Select(filter => new FilterDescriptor(filter, FilterScope.Controller))
                    .OrderBy(d => d, FilterDescriptorOrderComparer.Comparer)
                    .ToList();

                RouteDataActionConstraint pathConstraint;
                if (action.Path == "/")
                {
                    pathConstraint = new RouteDataActionConstraint("modulepath", string.Empty);
                }
                else
                {
                    pathConstraint = new RouteDataActionConstraint("modulepath", action.Path.Substring(1));
                }

                yield return new ModuleActionDescriptor()
                {
                    FilterDescriptors = filters,
                    Index = i++,
                    ActionConstraints = new List<IActionConstraintMetadata>()
                    {
                        new HttpMethodConstraint(new [] { action.Verb }),
                    },
                    ModuleType = type,
                    Parameters = new List<ParameterDescriptor>(), // No Parameter support in this sample
                    RouteConstraints = new List<RouteDataActionConstraint>()
                    {
                        new RouteDataActionConstraint("module", "true"), // only match a 'module' route
                        pathConstraint,
                    }
                };
            }
        }