Пример #1
0
        private static bool TestValue(
            IHttpRouteConstraint constraint,
            object value,
            Action <IHttpRoute> routeConfig = null
            )
        {
            HttpRequestMessage httpRequestMessage = new HttpRequestMessage();

            HttpRoute httpRoute = new HttpRoute();

            if (routeConfig != null)
            {
                routeConfig(httpRoute);
            }
            const string             parameterName = "fake";
            HttpRouteValueDictionary values        = new HttpRouteValueDictionary
            {
                { parameterName, value }
            };
            const HttpRouteDirection httpRouteDirection = HttpRouteDirection.UriResolution;

            return(constraint.Match(
                       httpRequestMessage,
                       httpRoute,
                       parameterName,
                       values,
                       httpRouteDirection
                       ));
        }
        protected virtual bool ProcessConstraint(HttpRequestMessage request, object constraint, string parameterName, HttpRouteValueDictionary values, HttpRouteDirection routeDirection)
        {
            IHttpRouteConstraint customConstraint = constraint as IHttpRouteConstraint;

            if (customConstraint != null)
            {
                return(customConstraint.Match(request, this, parameterName, values, routeDirection));
            }

            // If there was no custom constraint, then treat the constraint as a string which represents a Regex.
            string constraintsRule = constraint as string;

            if (constraintsRule == null)
            {
                throw Error.InvalidOperation(SRResources.Route_ValidationMustBeStringOrCustomConstraint, parameterName, RouteTemplate, typeof(IHttpRouteConstraint).Name);
            }

            object parameterValue;

            values.TryGetValue(parameterName, out parameterValue);
            string parameterValueString = Convert.ToString(parameterValue, CultureInfo.InvariantCulture);
            string constraintsRegEx     = "^(" + constraintsRule + ")$";

            return(Regex.IsMatch(parameterValueString, constraintsRegEx, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase));
        }
Пример #3
0
        protected override bool ProcessConstraint(
            HttpContextBase httpContext,
            object constraint,
            string parameterName,
            RouteValueDictionary values,
            RouteDirection routeDirection
            )
        {
            // The base class will validate that a constraint is either a string or IRoutingConstraint inside its
            // ProcessConstraint method. We're doing the validation up front here because we also support
            // IHttpRouteConstraint and we want the error message to reflect all three valid possibilities.
            ValidateConstraint(HttpRoute.RouteTemplate, parameterName, constraint);

            IHttpRouteConstraint httpRouteConstraint = constraint as IHttpRouteConstraint;

            if (httpRouteConstraint != null)
            {
                HttpRequestMessage request = httpContext.GetOrCreateHttpRequestMessage();
                return(httpRouteConstraint.Match(
                           request,
                           HttpRoute,
                           parameterName,
                           values,
                           ConvertRouteDirection(routeDirection)
                           ));
            }

            return(base.ProcessConstraint(
                       httpContext,
                       constraint,
                       parameterName,
                       values,
                       routeDirection
                       ));
        }
        protected bool TestValue(IHttpRouteConstraint constraint, object value)
        {
            HttpRequestMessage httpRequestMessage = new HttpRequestMessage();
            HttpRoute httpRoute = new HttpRoute();
            const string parameterName = "fake";
            HttpRouteValueDictionary values = new HttpRouteValueDictionary { { parameterName, value } };
            const HttpRouteDirection httpRouteDirection = HttpRouteDirection.UriResolution;

            return constraint.Match(httpRequestMessage, httpRoute, parameterName, values, httpRouteDirection);
        }        
Пример #5
0
        protected override bool ProcessConstraint(HttpContextBase httpContext, object constraint, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            IHttpRouteConstraint httpRouteConstraint = constraint as IHttpRouteConstraint;

            if (httpRouteConstraint != null)
            {
                HttpRequestMessage request = httpContext.GetOrCreateHttpRequestMessage();
                return(httpRouteConstraint.Match(request, HttpRoute, parameterName, values, ConvertRouteDirection(routeDirection)));
            }

            return(base.ProcessConstraint(httpContext, constraint, parameterName, values, routeDirection));
        }
        protected bool TestValue(IHttpRouteConstraint constraint, object value)
        {
            HttpRequestMessage       httpRequestMessage = new HttpRequestMessage();
            HttpRoute                httpRoute          = new HttpRoute();
            const string             parameterName      = "fake";
            HttpRouteValueDictionary values             = new HttpRouteValueDictionary {
                { parameterName, value }
            };
            const HttpRouteDirection httpRouteDirection = HttpRouteDirection.UriResolution;

            return(constraint.Match(httpRequestMessage, httpRoute, parameterName, values, httpRouteDirection));
        }
        public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary <string, object> values, HttpRouteDirection routeDirection)
        {
            // If the param is optional and has no value, then pass the constraint
            if (route.Defaults.ContainsKey(parameterName) &&
                route.Defaults[parameterName] == RouteParameter.Optional)
            {
                if (values[parameterName].HasNoValue())
                {
                    return(true);
                }
            }

            return(_constraint.Match(request, route, parameterName, values, routeDirection));
        }
Пример #8
0
        protected override bool ProcessConstraint(HttpContextBase httpContext, object constraint, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            IHttpRouteConstraint httpRouteConstraint = constraint as IHttpRouteConstraint;

            if (httpRouteConstraint != null)
            {
                HttpRequestMessage request = httpContext.GetHttpRequestMessage();
                if (request == null)
                {
                    request = HttpControllerHandler.ConvertRequest(httpContext);
                    httpContext.SetHttpRequestMessage(request);
                }

                return(httpRouteConstraint.Match(request, new HostedHttpRoute(this), parameterName, values, ConvertRouteDirection(routeDirection)));
            }

            return(base.ProcessConstraint(httpContext, constraint, parameterName, values, routeDirection));
        }
        public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary <string, object> values, HttpRouteDirection routeDirection)
        {
            var attributeRoute = (IAttributeRoute)route;
            var allDefaults    = new Dictionary <string, object>();

            allDefaults.Merge(attributeRoute.Defaults);
            allDefaults.Merge(attributeRoute.QueryStringDefaults);

            // If the param is optional and has no value, then pass the constraint
            if (allDefaults.ContainsKey(parameterName) && allDefaults[parameterName] == RouteParameter.Optional)
            {
                if (values[parameterName].HasNoValue())
                {
                    return(true);
                }
            }

            return(_constraint.Match(request, route, parameterName, values, routeDirection));
        }
        public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary <string, object> values, HttpRouteDirection routeDirection)
        {
            // If the query param does not exist, then fail.
            var queryString = HttpUtility.ParseQueryString(request.RequestUri.Query);
            var value       = queryString[parameterName] ?? values[parameterName];

            if (value.HasNoValue())
            {
                return(false);
            }

            // Process the constraint.
            var queryRouteValues = new Dictionary <string, object>
            {
                { parameterName, queryString[parameterName] }
            };

            return(_constraint == null || // ie: Simply ensure that the query param exists.
                   _constraint.Match(request, route, parameterName, queryRouteValues, routeDirection));
        }
        public override bool ShouldExploreController(string controllerVariableValue, HttpControllerDescriptor controllerDescriptor, IHttpRoute route)
        {
            if (route == null)
            {
                throw new ArgumentNullException("route");
            }

            bool result = base.ShouldExploreController(controllerVariableValue, controllerDescriptor, route);

            object constraint;

            if (route.Constraints.TryGetValue("controller", out constraint))
            {
                IHttpRouteConstraint typedConstraint = constraint as IHttpRouteConstraint;
                return(result && typedConstraint.Match(null, route, "controller", new Dictionary <string, object> {
                    { "controller", controllerVariableValue }
                }, HttpRouteDirection.UriResolution));
            }
            return(result);
        }