public IRouteDefinition Build(ActionCall call) { // I hate this, but it works. var routeDefinition = call.ToRouteDefinition().As <RouteDefinition>(); if (MethodToUrlBuilder.Matches(call.Method.Name)) { MethodToUrlBuilder.AddHttpConstraints(routeDefinition, call.Method.Name, txt => { }); } return(routeDefinition); }
public virtual IRouteDefinition Build(ActionCall call) { var routeDefinition = call.ToRouteDefinition(); var strippedNamespace = stripNamespace(call); visit(routeDefinition); if (strippedNamespace != call.HandlerType.Namespace) { if (!strippedNamespace.Contains(".")) { routeDefinition.Append(breakUpCamelCaseWithHypen(strippedNamespace)); } else { var patternParts = strippedNamespace.Split(new[] { "." }, StringSplitOptions.None); foreach (var patternPart in patternParts) { routeDefinition.Append(breakUpCamelCaseWithHypen(patternPart.Trim())); } } } var handlerName = call.HandlerType.Name; var match = HandlerExpression.Match(handlerName); if (match.Success && MethodToUrlBuilder.Matches(handlerName)) { // We're forcing handlers to end with "_handler" in this case handlerName = handlerName.Substring(0, match.Index); var properties = call.HasInput ? new TypeDescriptorCache().GetPropertiesFor(call.InputType()).Keys : new string[0]; MethodToUrlBuilder.Alter(routeDefinition, handlerName, properties, text => { }); } else { // Otherwise we're expecting something like "GetHandler" var httpMethod = call.HandlerType.Name.Replace(HANDLER, string.Empty); routeDefinition.ConstrainToHttpMethods(httpMethod.ToUpper()); } if (call.HasInput) { routeDefinition.ApplyInputType(call.InputType()); } return(routeDefinition); }