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)); }
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); }
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)); }
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); }