public static void Register(HttpConfiguration config) { SuperscribeConfig.Register(config); var engine = RouteEngineFactory.Create(); config.DependencyResolver = new SuperscribeDependencyAdapter(config.DependencyResolver, engine); engine.Route("Any" / Any.Controller / Any.Action / (Int)"siteId"); var forms = engine.Route(r => r / "api" / (Long)"parentId" / "Forms".Controller()); var blog = engine.Route(r => r / "sites" / (Int)"siteId" / "blog"); var portfolio = engine.Route(r => r / "sites" / (Int)"siteId" / "portfolio"); var blogposts = engine.Route(blog / "posts".Controller("blogposts")); engine.Route(forms / "VisibleFor" / (String)"appDataId", To.Action("VisibleFor")); engine.Route(forms / (Long)"id", To.Action("GetById")); engine.Route(blog / "tags".Controller("blogtags")); engine.Route(blogposts / (Int)"postId" / "media".Controller("blogpostmedia") / (Int)"id"); engine.Route(blogposts / "archives".Controller("blogpostarchives") / (Int)"year" / (Int)"month"); engine.Route(portfolio / "projects".Controller("portfolioprojects") / (Int)"projectId" / "media".Controller("portfolioprojectmedia") / (Int)"id"); engine.Route(portfolio / "tags".Controller("portfoliotags")); engine.Route(portfolio / "categories".Controller("portfoliocategories") / (Int)"id"); }
private static IRouteEngine RegisterCommon(HttpConfiguration configuration, string qualifier, IRouteEngine engine = null) { if (engine == null) { engine = RouteEngineFactory.Create(); } configuration.DependencyResolver = new SuperscribeDependencyAdapter(configuration.DependencyResolver, engine); configuration.MessageHandlers.Add(new SuperscribeHandler()); var actionSelector = configuration.Services.GetService(typeof(IHttpActionSelector)) as IHttpActionSelector; var controllerSelector = configuration.Services.GetService(typeof(IHttpControllerSelector)) as IHttpControllerSelector; var actionInvoker = configuration.Services.GetService(typeof(IHttpActionInvoker)) as IHttpActionInvoker; configuration.Services.Replace(typeof(IHttpActionSelector), new SuperscribeActionSelectorAdapter(actionSelector)); configuration.Services.Replace(typeof(IHttpControllerSelector), new SuperscribeControllerSelectorAdapter(controllerSelector)); configuration.Services.Replace(typeof(IHttpActionInvoker), new SuperscribeActionInvokerAdapter(actionInvoker)); ControllerTypeCache = new HttpControllerTypeCache(configuration); var template = "{*wildcard}"; if (!string.IsNullOrEmpty(qualifier)) { template = qualifier + "/" + template; } HttpConfiguration = configuration; // We need a single default route that will match everything // configuration.Routes.Clear(); configuration.Routes.MapHttpRoute( name: "Superscribe", routeTemplate: template, defaults: new { }); return(engine); }
public IEnumerable <ConfigurationSetupResult> Setup(string applicationEnvironment) { yield return(new ConfigurationSetupResult("superglue.RoutingImplimentationSetup", environment => { var stringRouteParser = new StringRouteParser(); var define = RouteEngineFactory.Create(new SuperscribeOptions { StringRouteParser = stringRouteParser }); environment[SuperscribeEnvironmentExtensions.SuperscribeConstants.Engine] = define; environment[RoutingEnvironmentExtensions.RouteConstants.CreateRouteBuilderFunc] = (Func <IRouteBuilder>)(() => new SuperscribeRouteBuilder(environment.ResolveAll <ICheckIfRouteExists>(), stringRouteParser, environment)); environment[RouteExtensions.RouteConstants.EndpointFromInput] = (Func <object, object>)(environment.GetEndpointFor); environment[RouteExtensions.RouteConstants.InputsForEndpoint] = (Func <object, IEnumerable <Type> >)(x => { var route = environment.GetRouteForEndpoint(x); return route == null ? new List <Type>() : route.InputTypes; }); environment[RouteExtensions.RouteConstants.ReverseRoute] = (Func <object, string>)(endpoint => { var endpointRoute = environment.GetRouteForEndpoint(endpoint); if (endpointRoute == null) { return ""; } var patternParts = new List <string>(); var node = endpointRoute.Node; var appendedParameters = new List <string>(); while (node != null) { var paramNode = node as ParamNode; if (paramNode != null) { if (endpointRoute.Parameters.ContainsKey(paramNode.Name)) { patternParts.Add(endpointRoute.Parameters[paramNode.Name].ToString()); appendedParameters.Add(paramNode.Name); } } else { patternParts.Add(node.Template); } patternParts.Add("/"); node = node.Parent; } var missingParameters = endpointRoute.Parameters.Where(x => !IsNullOrDefault(x.Value) && !appendedParameters.Contains(x.Key) && (x.Value.GetType().IsPrimitive || x.Value is string)); var patternBuilder = new StringBuilder(); patternParts.Reverse(); foreach (var part in patternParts) { patternBuilder.Append(part); } var parameterSplitter = "?"; foreach (var missingParameter in missingParameters) { patternBuilder.AppendFormat("{0}{1}={2}", parameterSplitter, missingParameter.Key, missingParameter.Value); parameterSplitter = "&"; } return patternBuilder.ToString(); }); return Task.CompletedTask; }, "superglue.RoutingSetup")); }