public void BuildRoute_ValidatesConstraintType_InvalidType() { // Arrange var actions = GetActions(); var builder = new DirectRouteBuilder(actions, targetIsAction: true); var constraint = new Uri("http://localhost/"); var constraints = new TRouteValueDictionary(); constraints.Add("custom", constraint); builder.Constraints = constraints; builder.Template = "c/{id}"; #if ASPNETWEBAPI string expectedMessage = "The constraint entry 'custom' on the route with route template 'c/{id}' " + "must have a string value or be of a type which implements 'System.Web.Http.Routing.IHttpRouteConstraint'."; #else string expectedMessage = "The constraint entry 'custom' on the route with route template 'c/{id}' " + "must have a string value or be of a type which implements 'System.Web.Routing.IRouteConstraint'."; #endif // Act & Assert Assert.Throws<InvalidOperationException>(() => builder.Build(), expectedMessage); }
public void BuildRoute_ValidatesConstraintType_StringRegex() { // Arrange var actions = GetActions(); var builder = new DirectRouteBuilder(actions, targetIsAction: true); var constraint = "product|products"; var constraints = new TRouteValueDictionary(); constraints.Add("custom", constraint); builder.Constraints = constraints; // Act var routeEntry = builder.Build(); // Assert Assert.NotNull(routeEntry.Route.Constraints["custom"]); }
public void CreateRoute_ValidatesConstraintType_TRouteConstraint() { // Arrange var actions = GetActions(); var builder = new DirectRouteBuilder(actions, targetIsAction: true); var constraint = new AlphaRouteConstraint(); var constraints = new TRouteValueDictionary(); constraints.Add("custom", constraint); builder.Constraints = constraints; // Act var routeEntry = builder.Build(); // Assert Assert.NotNull(routeEntry.Route.Constraints["custom"]); }
/// <summary>Creates a route builder that can build a route matching this context.</summary> /// <param name="template">The route template.</param> /// <param name="constraintResolver"> /// The inline constraint resolver to use, if any; otherwise, <see langword="null"/>. /// </param> /// <returns>A route builder that can build a route matching this context.</returns> public IDirectRouteBuilder CreateBuilder(string template, IInlineConstraintResolver constraintResolver) { DirectRouteBuilder builder = new DirectRouteBuilder(_actions, _targetIsAction); #if ASPNETWEBAPI string prefixedTemplate = BuildRouteTemplate(_prefix, template); #else string prefixedTemplate = BuildRouteTemplate(_areaPrefix, _controllerPrefix, template ?? String.Empty); #endif ValidateTemplate(prefixedTemplate); if (constraintResolver != null) { TRouteDictionary defaults = new TRouteDictionary(); TRouteDictionary constraints = new TRouteDictionary(); string detokenizedTemplate = InlineRouteTemplateParser.ParseRouteTemplate(prefixedTemplate, defaults, constraints, constraintResolver); TParsedRoute parsedRoute = RouteParser.Parse(detokenizedTemplate); decimal precedence = RoutePrecedence.Compute(parsedRoute, constraints); builder.Defaults = defaults; builder.Constraints = constraints; builder.Template = detokenizedTemplate; builder.Precedence = precedence; builder.ParsedRoute = parsedRoute; } else { builder.Template = prefixedTemplate; } return builder; }
private static IHttpRoute CreateDirectRoute(string template, IReadOnlyCollection<ReflectedHttpActionDescriptor> actions) { DirectRouteBuilder builder = new DirectRouteBuilder(actions, targetIsAction: true); builder.Template = template; return builder.Build().Route; }