Exemplo n.º 1
0
        /// <summary>
        /// Removes the rock page and default routes from RouteTable.Routes but leaves the ones created by ODataService.
        /// </summary>
        public static void RemoveRockPageRoutes()
        {
            RouteCollection  routes           = RouteTable.Routes;
            PageRouteService pageRouteService = new PageRouteService(new Rock.Data.RockContext());
            var pageRoutes = pageRouteService.Queryable().ToList();

            // First we have to remove the routes stored in the DB without removing the ODataService routes because we can't reload them.
            // Routes that were removed from the DB have already been removed from the RouteTable in PreSaveChanges()
            foreach (var pageRoute in pageRoutes)
            {
                var route = routes.OfType <Route>().Where(a => a.Url == pageRoute.Route).FirstOrDefault();

                if (route != null)
                {
                    routes.Remove(route);
                }
            }

            // Remove the shortlink route
            var shortLinkRoute = routes.OfType <Route>().Where(r => r.Url == "{shortlink}").FirstOrDefault();

            if (shortLinkRoute != null)
            {
                routes.Remove(shortLinkRoute);
            }

            // Remove the page route
            var pageIdRoute = routes.OfType <Route>().Where(r => r.Url == "page/{PageId}").FirstOrDefault();

            if (pageIdRoute != null)
            {
                routes.Remove(pageIdRoute);
            }

            // Remove the default route for when no parameters are passed
            var defaultRoute = routes.OfType <Route>().Where(r => r.Url == "").FirstOrDefault();

            if (defaultRoute != null)
            {
                routes.Remove(pageIdRoute);
            }

            // Remove scriptmanager ignore route
            var scriptmanagerRoute = routes.OfType <Route>().Where(r => r.Url == "{resource}.axd/{*pathInfo}").FirstOrDefault();

            if (scriptmanagerRoute != null)
            {
                routes.Remove(scriptmanagerRoute);
            }
        }
        public static Route RegisterDefaultRoutes(this RouteCollection @this, string url, object defaults, string[] namespaces, Assembly resourceAssembly, string applicationDefaultNamespace)
        {
            Contract.Requires(@this != null);

            @this.RouteExistingFiles = true;

            var defaultRouteName = @default;
            var defaultScriptResourceRouteName  = ResourceRouteHandler.GetDefaultResourceRouteName(ResourceRouteHandler.DefaultFolders.Scripts);
            var defaultContentResourceRouteName = ResourceRouteHandler.GetDefaultResourceRouteName(ResourceRouteHandler.DefaultFolders.Content);

            var constraints = ResourceRouteHandler.CreateControllerExcludeConstraintForDefaultFolders();

            var defaultRoute = @this.MapRoute(defaultRouteName, url, defaults, constraints, namespaces);

            defaultRoute.DataTokens[ResourceRouteHandler.DataTokens.defaultScriptResourceRouteName]  = defaultScriptResourceRouteName;
            defaultRoute.DataTokens[ResourceRouteHandler.DataTokens.defaultContentResourceRouteName] = defaultContentResourceRouteName;


            var areaRoutes = @this
                             .OfType <Route>()
                             .Where(r => r.IsAreaDefaultRoute());

            foreach (var areaRoute in areaRoutes)
            {
                areaRoute.DataTokens[ResourceRouteHandler.DataTokens.defaultScriptResourceRouteName]  = defaultScriptResourceRouteName;
                areaRoute.DataTokens[ResourceRouteHandler.DataTokens.defaultContentResourceRouteName] = defaultContentResourceRouteName;
                areaRoute.DataTokens[DefaultRouteConstants.defaultRouteName] = defaultRouteName;
            }

            ResourceRouteHandler.RegisterResourceRoute(@this.MapRoute, defaultScriptResourceRouteName, ResourceRouteHandler.DefaultFolders.Scripts, resourceAssembly, applicationDefaultNamespace);
            ResourceRouteHandler.RegisterResourceRoute(@this.MapRoute, defaultContentResourceRouteName, ResourceRouteHandler.DefaultFolders.Content, resourceAssembly, applicationDefaultNamespace);

            return(defaultRoute);
        }
        /// <summary>
        /// Finds the namespaces for area.
        /// </summary>
        /// <param name="area">The area.</param>
        /// <param name="routes">The routes.</param>
        /// <returns>
        /// A namespaces for area represented as a <see cref="string"/> instance
        /// </returns>
        protected virtual IEnumerable <string> FindNamespacesForArea(string area, RouteCollection routes)
        {
            var namespacesForArea = new List <string>();
            var namespacesCommon  = new List <string>();

            foreach (var route in routes.OfType <Route>().Where(r => r.DataTokens != null && r.DataTokens["Namespaces"] != null))
            {
                // search for area-based namespaces
                if (route.DataTokens["area"] != null && route.DataTokens["area"].ToString().Equals(area, StringComparison.OrdinalIgnoreCase))
                {
                    namespacesForArea.AddRange((IEnumerable <string>)route.DataTokens["Namespaces"]);
                }
                else if (route.DataTokens["area"] == null)
                {
                    namespacesCommon.AddRange((IEnumerable <string>)route.DataTokens["Namespaces"]);
                }
            }

            if (namespacesForArea.Count > 0)
            {
                return(namespacesForArea);
            }
            else if (namespacesCommon.Count > 0)
            {
                return(namespacesCommon);
            }

            return(null);
        }
Exemplo n.º 4
0
 public ForkListener(RouteCollection <TProducer> routes, IForkSubscriber subscriber, IForkHandlerMiddleware middleware)
 {
     _routes        = routes.OfType <InputOutputRoute>().Where(e => e.ToProducer == typeof(TProducer)).ToArray();
     _middleware    = middleware;
     _subscriber    = subscriber;
     _subscriptions = new List <IDisposable>();
 }
 public static void IgnoreStandardExclusions(this RouteCollection routes)
 {
     // Ignore standard stuff...
     using (routes.GetWriteLock())
     {
         var exclusions = new Dictionary <string, object>()
         {
             { "{resource}.axd/{*pathInfo}", null },
             { "{*allaxd}", new { allaxd = @".*\.axd(/.*)?" } },
             { "{*allashx}", new { allashx = @".*\.ashx(/.*)?" } },
             { "{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" } },
             { "{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" } },
         };
         //ensure they're not re-added
         foreach (var e in exclusions.Where(e => !routes.OfType <Route>().Any(x => x.Url == e.Key)))
         {
             if (e.Value == null)
             {
                 routes.IgnoreRoute(e.Key);
             }
             else
             {
                 routes.IgnoreRoute(e.Key, e.Value);
             }
         }
     }
 }
Exemplo n.º 6
0
        public override TaskContinuation Execute()
        {
            IList <string> reservedAliases = new List <string>();

            Action <string> addIfNotExists = name =>
            {
                if (!reservedAliases.Contains(name, StringComparer.OrdinalIgnoreCase) && !reservedAliasRepository.IsMatching(name))
                {
                    reservedAliases.Add(name);
                }
            };

            foreach (Route route in routes.OfType <Route>())
            {
                string[] urlSegments = route.Url.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

                if (urlSegments.Any())
                {
                    string firstSegment = urlSegments.First();

                    if (firstSegment.StartsWith("{", StringComparison.Ordinal) && firstSegment.EndsWith("}", StringComparison.Ordinal))
                    {
                        // Special Values, but we will only consider the the Controllers
                        if (firstSegment.Equals("{controller}", StringComparison.OrdinalIgnoreCase))
                        {
                            IEnumerable <Type> controllerTypes = GetType().Assembly.ConcreteTypes().Where(type => controllerType.IsAssignableFrom(type));

                            foreach (Type controller in controllerTypes)
                            {
                                string controllerName = controller.Name.Substring(0, controller.Name.Length - "Controller".Length);

                                addIfNotExists(controllerName);
                            }
                        }
                    }
                    else if (!firstSegment.StartsWith("{", StringComparison.Ordinal) && !firstSegment.EndsWith("}", StringComparison.Ordinal))
                    {
                        // Constant values
                        addIfNotExists(firstSegment);
                    }
                }
            }

            bool shouldCommit = false;

            foreach (string aliasName in reservedAliases.OrderBy(ra => ra))
            {
                reservedAliasRepository.Add(new ReservedAlias {
                    Name = aliasName
                });
                shouldCommit = true;
            }

            if (shouldCommit)
            {
                unitOfWork.Commit();
            }

            return(TaskContinuation.Continue);
        }
Exemplo n.º 7
0
        public void Publish(IEnumerable <RouteDescriptor> routes)
        {
            var routesArray = routes
                              .OrderByDescending(r => r.Priority)
                              .ToArray();

            // this is not called often, but is intended to surface problems before
            // the actual collection is modified
            var preloading = new RouteCollection();

            foreach (var route in routesArray)
            {
                preloading.Add(route.Name, route.Route);
            }

            using (_routeCollection.GetWriteLock()) {
                // existing routes are removed while the collection is briefly inaccessable
                var cropArray = _routeCollection
                                .OfType <ShellRoute>()
                                .Where(sr => sr.ShellSettingsName == _shellSettings.Name)
                                .ToArray();

                foreach (var crop in cropArray)
                {
                    _routeCollection.Remove(crop);
                }

                // new routes are added
                foreach (var routeDescriptor in routesArray)
                {
                    var shellRoute = new ShellRoute(routeDescriptor.Route, _shellSettings, _workContextAccessor, _runningShellTable);
                    _routeCollection.Add(routeDescriptor.Name, shellRoute);
                }
            }
        }
 /// <inheritdoc/>
 public override IEnumerator <IHttpRoute> GetEnumerator()
 {
     // Here we only care about Web API routes.
     return(_routeCollection
            .OfType <HttpWebRoute>()
            .Select(httpWebRoute => httpWebRoute.HttpRoute)
            .GetEnumerator());
 }
Exemplo n.º 9
0
        void RenderRoutesVB(RouteCollection routes)
        {
            if (routes == null)
            {
                throw new ArgumentNullException("routes");
            }

            writer.Write("<!DOCTYPE html>");
            writer.Write("<html>");
            RenderHtmlHead();
            writer.Write("<body class='vb'>");
            RenderTopComments("'");
            writer.WriteLine();

            string prevRouteContext = null;

            foreach (Route route in routes.OfType <Route>())
            {
                string routeContext = (route.DataTokens != null) ?
                                      route.DataTokens[DataTokenKeys.RouteContext] as string
               : null;

                if (routeContext != prevRouteContext)
                {
                    if (prevRouteContext != null)
                    {
                        writer.WriteLine();
                        writer.WriteLine("<span class='keyword'>#End Region</span>");
                    }

                    if (routeContext != null)
                    {
                        string display = routeContext.Length == 0 ? "(root)" : routeContext;

                        writer.WriteLine();
                        writer.Write("<span class='keyword'>#Region</span> ");
                        writer.Write(ValueToVBString(display));
                        writer.WriteLine();
                    }
                }

                writer.WriteLine();
                RenderRouteVB(route);

                prevRouteContext = routeContext;
            }

            if (prevRouteContext != null)
            {
                writer.WriteLine();
                writer.Write("<span class='keyword'>#End Region</span>");
            }

            writer.Write("</body>");
            writer.Write("</html>");
        }
Exemplo n.º 10
0
        public static Route ForAction(this RouteCollection routes, string controller, string action)
        {
            var matches = routes.OfType <Route>().Where(r =>
                                                        controller.Equals((string)r.Defaults["controller"], StringComparison.InvariantCultureIgnoreCase) &&
                                                        action.Equals((string)r.Defaults["action"], StringComparison.InvariantCultureIgnoreCase))
                          .ToList();

            matches.Count.ShouldEqual(1);
            return(matches.First());
        }
        public void TestBuildHttpRouteTable()
        {
            var routes = new RouteCollection();
            HttpRouteTableBuilder.BuildTable(routes,typeof(HttpRouteTableBuilderTests).Assembly);

            // Check that the HTTP route table is build correctly
            Assert.AreEqual(3,routes.Count);
            Assert.IsTrue(routes.OfType<HttpWebRoute>().Any(route => route.Url == "api/methodlevel/route/{id}"));
            Assert.IsTrue(routes.OfType<HttpWebRoute>().Any(route => route.Url == "api/subroute/controller"));
            Assert.IsTrue(routes.OfType<HttpWebRoute>().Any(route => route.Url == "api/methodlevel/basic"));

            // Find the route with optional url parameters
            var routeWithParameters = routes.OfType<HttpWebRoute>()
                .FirstOrDefault(route => route.Url == "api/methodlevel/route/{id}");

            // Check that the ID parameter is indeed marked as optional.
            Assert.IsNotNull(routeWithParameters);
            Assert.AreEqual(RouteParameter.Optional, routeWithParameters.Defaults["id"]);
        }
 public void should_register_routes_in_order_of_the_number_of_their_inputs()
 {
     routes.OfType <Route>().Select(r => r.Url).ShouldHaveTheSameElementsAs(
         "area/sub2/prop",
         "area/sub4/some_pattern",
         "area/sub2/{Name}",
         "area/sub/{Name}/{Age}",
         "area/sub2/{Name}/{Age}",
         "area/sub3/{Name}/{Age}");
 }
Exemplo n.º 13
0
        public void TestBuildHttpRouteTable()
        {
            var routes = new RouteCollection();

            HttpRouteTableBuilder.BuildTable(routes, typeof(HttpRouteTableBuilderTests).Assembly);

            // Check that the HTTP route table is build correctly
            Assert.AreEqual(3, routes.Count);
            Assert.IsTrue(routes.OfType <HttpWebRoute>().Any(route => route.Url == "api/methodlevel/route/{id}"));
            Assert.IsTrue(routes.OfType <HttpWebRoute>().Any(route => route.Url == "api/subroute/controller"));
            Assert.IsTrue(routes.OfType <HttpWebRoute>().Any(route => route.Url == "api/methodlevel/basic"));

            // Find the route with optional url parameters
            var routeWithParameters = routes.OfType <HttpWebRoute>()
                                      .FirstOrDefault(route => route.Url == "api/methodlevel/route/{id}");

            // Check that the ID parameter is indeed marked as optional.
            Assert.IsNotNull(routeWithParameters);
            Assert.AreEqual(RouteParameter.Optional, routeWithParameters.Defaults["id"]);
        }
Exemplo n.º 14
0
        public static void RegisterNoAccountRoutes(RouteCollection routes)
        {
            RegisterRoutes(routes);

            // deregister the non SPA MVC route, and replace it with a redirect to Functions Homepage so
            // the user would get the helpful error.
            var legacyRoute = routes.OfType <Route>().First(r => r.Url == FunctionController.LegacyNonSpaRouteUrl);

            routes.Remove(legacyRoute);
            routes.Add(new Route(FunctionController.LegacyNonSpaRouteUrl, new RedirectRouteHandler("~/#/functions")));
        }
        public void ExplosionLeavesOriginalRoutesIntact()
        {
            _routes.MapRoute("foo", "{controller}");

            var publisher = _container.Resolve <IRoutePublisher>();

            try {
                publisher.Publish(new[] { Desc("yarg", "bar"), Desc("yarg", "quux") });
            }
            catch (ArgumentException) {
                Assert.That(_routes.Count(), Is.EqualTo(1));
                Assert.That(_routes.OfType <Route>().Single().Url, Is.EqualTo("{controller}"));
            }
        }
Exemplo n.º 16
0
        public static void RegisterNoAccountRoutes(RouteCollection routes)
        {
            if (routes == null)
            {
                throw new ArgumentNullException("routes");
            }

            RegisterRoutes(routes);

            // deregister the non SPA MVC route, and replace it with a redirect to Functions Homepage so
            // the user would get the helpful error.
            var legacyRoute = routes.OfType<Route>().First(r => r.Url == FunctionController.LegacyNonSpaRouteUrl);
            routes.Remove(legacyRoute);
            routes.Add(new Route(FunctionController.LegacyNonSpaRouteUrl, new RedirectRouteHandler("~/#/functions")));
        }
Exemplo n.º 17
0
 public static IEnumerable<NamedRoute> GetRoutesForCurrentRequest(RouteCollection routes,IEnumerable<INavigationRouteFilter> routeFilters)
 {
     var navigationRoutes = routes.OfType<NamedRoute>().Where(r=> !r.IsChild).ToList();
     if (routeFilters.Any())
     {
         foreach (var route in navigationRoutes.ToArray())
         {
             if (routeFilters.Any(filter => filter.ShouldRemove(route)))
             {
                 navigationRoutes.Remove(route);
             }
         }
     }
     return navigationRoutes;
 }
Exemplo n.º 18
0
        /// <summary>
        ///   <para>Assign route handler to all routes passed</para>
        /// </summary>
        /// <param name = "routes">Routes</param>
        public static void Assign(RouteCollection routes)
        {
            using (routes.GetReadLock())
            {
                var routeHandler
                    = new RouteHandler <THttpHandler>(
                          ControllerBuilder.Current.GetControllerFactory());

                foreach (var route in routes
                         .OfType <Route>()
                         .Where(r => (r.RouteHandler is MvcRouteHandler)))
                {
                    route.RouteHandler = routeHandler;
                }
            }
        }
		public IEnumerable<RouteDefinition> GetRouteTable(RouteCollection routes)
		{
			List<RouteDefinition> collection = new List<RouteDefinition>();
			RouteReader reader = CreateReader(new IRouteInterceptor[] {
				new RegexConstraintReader(), 
				new RouteVariableAssigner(routes.Variables)
			});

			foreach (Route route in routes.OfType<Route>())
			{
				RouteDefinition definition = reader.Read(route);
				if (definition != null)
					collection.Add(definition);
			}
			return collection;
		}
Exemplo n.º 20
0
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event.
        /// </summary>
        /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnLoad(EventArgs e)
        {
            RouteCollection routes = RouteTable.Routes;

            PageRouteService pageRouteService = new PageRouteService(new Rock.Data.RockContext());
            var pageRoutes = pageRouteService.Queryable().ToList();


            // Check to see if we have any missing routes.  If so, simply run reregister.
            foreach (var pageRoute in pageRoutes)
            {
                var route = routes.OfType <Route>().Where(a => a.Url == pageRoute.Route && a.PageIds().Contains(pageRoute.PageId)).FirstOrDefault();

                if (route == null)
                {
                    nbNotification.NotificationBoxType = Rock.Web.UI.Controls.NotificationBoxType.Warning;
                    nbNotification.Text = "Routes were out-of-date.  Running reregister routes.";

                    ReRegisterRoutes();
                    break;
                }
            }

            // Check to see if we have any missing shortcodes
            var outOfDate = RockDateTime.Now.AddMinutes(-30);
            var sc        = new LavaShortcodeService(new Rock.Data.RockContext()).Queryable().Where(l => l.CreatedDateTime > outOfDate || l.ModifiedDateTime > outOfDate).ToList();

            if (sc.Count > 0)
            {
                nbNotification.NotificationBoxType = Rock.Web.UI.Controls.NotificationBoxType.Warning;
                nbNotification.Text = "Shortcodes were out-of-date.  Running register shortcodes. " + sc.Count;
                foreach (var code in sc)
                {
                    // register shortcode
                    if (code.TagType == TagType.Block)
                    {
                        Template.RegisterShortcode <DynamicShortcodeBlock>(code.TagName);
                    }
                    else
                    {
                        Template.RegisterShortcode <DynamicShortcodeInline>(code.TagName);
                    }
                }

                LavaShortcodeCache.Clear();
            }
        }
Exemplo n.º 21
0
        /// <summary>
        /// 获取内建的简单路由表实例,如果没有则创建一个。
        /// </summary>
        /// <param name="routes">系统路由集合</param>
        /// <returns>内建的简单路由表实例</returns>
        public static SimpleRouteTable SimpleRouteTable(this RouteCollection routes)
        {
            if (routes == null)
            {
                throw new ArgumentNullException("routes");
            }

            lock ( routes )
            {
                var routeTable = routes.OfType <SimpleRouteTable>().FirstOrDefault(route => route.IsBuiltIn);
                if (routeTable == null)
                {
                    routes.RegisterSimpleRouteTable(routeTable = new SimpleRouteTable());
                }
                return(routeTable);
            }
        }
Exemplo n.º 22
0
        /// <summary>
        /// 获取内建的简单路由表实例,如果没有则创建一个。
        /// </summary>
        /// <param name="routes">系统路由集合</param>
        /// <returns>内建的简单路由表实例</returns>
        public static SimpleRouteTable SimpleRouteTable(this RouteCollection routes)
        {
            if (routes == null)
            {
                throw new ArgumentNullException("routes");
            }

            lock ( routes )
            {
                var routeTable = routes.OfType <SimpleRouteTable>().FirstOrDefault(route => route.Name == "Mvc_BuiltIn");
                if (routeTable == null)
                {
                    routes.Add(routeTable = new SimpleRouteTable("Mvc_BuiltIn", new MvcRouteHandler(), true));
                }
                return(routeTable);
            }
        }
        private static void MapRoutes(RouteCollection routes)
        {
            // The default route is http://{root}/nuget/Packages
            var factory = new DataServiceHostFactory();
            var serviceRoute = new ServiceRoute("nuget", factory, typeof(Packages));
            serviceRoute.Defaults = new RouteValueDictionary { { "serviceType", "odata" } };
            serviceRoute.Constraints = new RouteValueDictionary { { "serviceType", "odata" } };
            routes.Add("nuget", serviceRoute);

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

            // For some godforsaken reason, the PublishPackage route (registered by NuGet.Server) causes the { controller, action } => url mapping to always return this route.
            routes.Remove(routes.OfType<Route>().Single(r => r.DataTokens != null && r.DataTokens.ContainsKey("__RouteName") && (string)r.DataTokens["__RouteName"] == "PublishPackage"));
        }
Exemplo n.º 24
0
        /// <summary>
        /// 检查规则是否与任何简单路由表冲突
        /// </summary>
        /// <param name="routes">路由集合</param>
        /// <param name="rule">要检查的简单路由规则</param>
        /// <returns>如果有冲突,返回冲突的规则</returns>
        public static SimpleRouteRule CheckConflict(this RouteCollection routes, SimpleRouteRule rule)
        {
            if (routes == null)
            {
                throw new ArgumentNullException("routes");
            }

            if (rule == null)
            {
                throw new ArgumentNullException("rule");
            }


            lock ( routes )
            {
                return(routes.OfType <SimpleRouteTable>().Select(routeTable => routeTable.CheckConflict(rule)).NotNull().FirstOrDefault());
            }
        }
        public IEnumerable <RouteDefinition> GetRouteTable(RouteCollection routes)
        {
            List <RouteDefinition> collection = new List <RouteDefinition>();
            RouteReader            reader     = CreateReader(new IRouteInterceptor[] {
                new RegexConstraintReader(),
                new RouteVariableAssigner(routes.Variables)
            });

            foreach (Route route in routes.OfType <Route>())
            {
                RouteDefinition definition = reader.Read(route);
                if (definition != null)
                {
                    collection.Add(definition);
                }
            }
            return(collection);
        }
Exemplo n.º 26
0
        protected void ReRegisterRoutes()
        {
            RouteCollection routes         = RouteTable.Routes;
            var             routesToDelete = routes.OfType <Route>().Where(r => r.RouteHandler is Rock.Web.RockRouteHandler).ToList();

            foreach (Route oldRoute in routesToDelete)
            {
                routes.Remove(oldRoute);
            }


            PageRouteService pageRouteService = new PageRouteService(new Rock.Data.RockContext());

            var routesToInsert = new RouteCollection();

            // Add ignore rule for asp.net ScriptManager files.
            routesToInsert.Ignore("{resource}.axd/{*pathInfo}");

            //Add page routes, order is very important here as IIS takes the first match
            IOrderedEnumerable <PageRoute> pageRoutes = pageRouteService.Queryable().AsNoTracking().ToList().OrderBy(r => r.Route, StringComparer.OrdinalIgnoreCase);

            foreach (var pageRoute in pageRoutes)
            {
                routesToInsert.AddPageRoute(pageRoute.Route, new Rock.Web.PageAndRouteId {
                    PageId = pageRoute.PageId, RouteId = pageRoute.Id
                });
            }

            // Add a default page route
            routesToInsert.Add(new Route("page/{PageId}", new Rock.Web.RockRouteHandler()));

            // Add a default route for when no parameters are passed
            routesToInsert.Add(new Route("", new Rock.Web.RockRouteHandler()));

            // Add a default route for shortlinks
            routesToInsert.Add(new Route("{shortlink}", new Rock.Web.RockRouteHandler()));

            // Insert the list of routes to the beginning of the Routes so that PageRoutes, etc are before OdataRoutes. Even when Re-Registering routes
            // Since we are inserting at 0, reverse the list to they end up in the original order
            foreach (var pageRoute in routesToInsert.Reverse())
            {
                routes.Insert(0, pageRoute);
            }
        }
 public static IEnumerable<NamedRoute> GetRoutesForCurrentRequest(RouteCollection routes,IEnumerable<INavigationRouteFilter> routeFilters)
 {
     var navigationRoutes = routes.OfType<NamedRoute>().ToList();
     if (routeFilters.Count() > 0)
     {
         foreach (var route in navigationRoutes.ToArray())
         {
             foreach (var filter in routeFilters)
             {
                 if (filter.ShouldRemove(route))
                 {
                     navigationRoutes.Remove(route);
                     break;
                 }
             }
         }
     }
     return navigationRoutes;
 }
Exemplo n.º 28
0
        public static IEnumerable <NamedRoute> GetRoutesForCurrentRequest(RouteCollection routes, IEnumerable <INavigationRouteFilter> routeFilters)
        {
            var navigationRoutes = routes.OfType <NamedRoute>().Where(r => r.IsChild == false).ToList();

            if (routeFilters.Count() > 0)
            {
                foreach (var route in navigationRoutes.ToArray())
                {
                    foreach (var filter in routeFilters)
                    {
                        if (filter.ShouldRemove(route))
                        {
                            navigationRoutes.Remove(route);
                            break;
                        }
                    }
                }
            }
            return(navigationRoutes);
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            //routes.MapAttributeRoutes();

            foreach (var route in routes.OfType<Route>())
            {
                if(route.DataTokens == null)
                    continue;

                var namespaces = route.DataTokens["namespaces"] as string[];

                if (namespaces != null)
                {
                    route.Url = Regex.Match(namespaces[0], "^SymbolSource.Gateway.([^.]+).Core$").Groups[1] + "/" + route.Url;
                    ReplaceToken(route, "login", "Basic");
                    ReplaceToken(route, "company", "Basic");
                    ReplaceToken(route, "password", "Basic");
                    ReplaceToken(route, "repository", "Basic");
                }
            }
        }
Exemplo n.º 30
0
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event.
        /// </summary>
        /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnLoad(EventArgs e)
        {
            RouteCollection routes = RouteTable.Routes;

            PageRouteService pageRouteService = new PageRouteService(new Rock.Data.RockContext());
            var pageRoutes = pageRouteService.Queryable().ToList();


            // Check to see if we have any missing routes.  If so, simply run reregister.
            foreach (var pageRoute in pageRoutes)
            {
                var route = routes.OfType <Route>().Where(a => a.Url == pageRoute.Route && a.PageIds().Contains(pageRoute.PageId)).FirstOrDefault();

                if (route == null)
                {
                    nbNotification.NotificationBoxType = Rock.Web.UI.Controls.NotificationBoxType.Warning;
                    nbNotification.Text = "Routes were out-of-date.  Running reregister routes.";

                    ReRegisterRoutes();
                    break;
                }
            }
        }
        private static void MapRoutes(RouteCollection routes)
        {
            // The default route is http://{root}/nuget/Packages
            var factory      = new DataServiceHostFactory();
            var serviceRoute = new ServiceRoute("nuget", factory, typeof(Packages));

            serviceRoute.Defaults = new RouteValueDictionary {
                { "serviceType", "odata" }
            };
            serviceRoute.Constraints = new RouteValueDictionary {
                { "serviceType", "odata" }
            };
            routes.Add("nuget", serviceRoute);

            routes.MapRoute(
                "Default",                    // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
                );

            // For some godforsaken reason, the PublishPackage route (registered by NuGet.Server) causes the { controller, action } => url mapping to always return this route.
            routes.Remove(routes.OfType <Route>().Single(r => r.DataTokens != null && r.DataTokens.ContainsKey("__RouteName") && (string)r.DataTokens["__RouteName"] == "PublishPackage"));
        }
Exemplo n.º 32
0
        public void Publish(IEnumerable <RouteDescriptor> routes)
        {
            var routesArray = routes.OrderByDescending(r => r.Priority).ToArray();

            // this is not called often, but is intended to surface problems before
            // the actual collection is modified
            var preloading = new RouteCollection();

            foreach (var route in routesArray)
            {
                preloading.Add(route.Name, route.Route);
            }

            using (_routeCollection.GetWriteLock())
            {
                // existing routes are removed while the collection is briefly inaccessable
                var cropArray = _routeCollection
                                .OfType <ShellRoute>()
                                .ToArray();

                foreach (var crop in cropArray)
                {
                    _routeCollection.Remove(crop);
                }

                var urls = "<table>";
                // new routes are added
                foreach (var routeDescriptor in routesArray)
                {
                    var route = (Route)routeDescriptor.Route;
                    urls += string.Format("<tr><td>{0}</td><td>{1}</td></tr>", route.Url, routeDescriptor.Priority) + Environment.NewLine;
                    _routeCollection.Add(routeDescriptor.Name, _shellRouteFactory(routeDescriptor.Route));
                }

                var sss = urls + "</table>";
            }
        }
        /// <summary>
        /// Finds the namespaces for area.
        /// </summary>
        /// <param name="area">The area.</param>
        /// <param name="routes">The routes.</param>
        /// <returns>
        /// A namespaces for area represented as a <see cref="string"/> instance
        /// </returns>
        protected IEnumerable<string> FindNamespacesForArea(string area, RouteCollection routes)
        {
            var namespacesForArea = new List<string>();
            var namespacesCommon = new List<string>();

            foreach (var route in routes.OfType<Route>().Where(r => r.DataTokens != null && r.DataTokens["Namespaces"] != null))
            {
                // search for area-based namespaces
                if (route.DataTokens["area"] != null && route.DataTokens["area"].ToString().Equals(area, StringComparison.OrdinalIgnoreCase))
                    namespacesForArea.AddRange((IEnumerable<string>)route.DataTokens["Namespaces"]);
                else if (route.DataTokens["area"] == null)
                    namespacesCommon.AddRange((IEnumerable<string>)route.DataTokens["Namespaces"]);
            }

            if (namespacesForArea.Count > 0)
            {
                return namespacesForArea;
            }
            else if (namespacesCommon.Count > 0)
            {
                return namespacesCommon;
            }

            return null;
        }
Exemplo n.º 34
0
 public static IEnumerable <Route> ForController(this RouteCollection routes, string controller)
 {
     return(routes.OfType <Route>().Where(r =>
                                          controller.Equals((string)r.Defaults["controller"], StringComparison.InvariantCultureIgnoreCase)));
 }
Exemplo n.º 35
0
 private static IEnumerable<Tuple<string, string>> GetAreaNameAndNamespace(RouteCollection routeEntries)
 {
     var areas = routeEntries
         .OfType<Route>()
         .Where(x => x.DataTokens != null)
         .Where(x => x.DataTokens.Any(token => token.Key == "area"))
         .Select(x => Tuple.Create(ExtractSingleValue(x.DataTokens["area"]), ExtractSingleValue(x.DataTokens["Namespaces"]).Replace("*", "").TrimEnd('.')))
         ;
     return areas.ToArray();
 }
        void RenderRoutesVB(RouteCollection routes)
        {
            if (routes == null) throw new ArgumentNullException("routes");

             writer.Write("<!DOCTYPE html>");
             writer.Write("<html>");
             RenderHtmlHead();
             writer.Write("<body class='vb'>");
             RenderTopComments("'");
             writer.WriteLine();

             string prevRouteContext = null;

             foreach (Route route in routes.OfType<Route>()) {

            string routeContext = (route.DataTokens != null) ?
               route.DataTokens[DataTokenKeys.RouteContext] as string
               : null;

            if (routeContext != prevRouteContext) {

               if (prevRouteContext != null) {
                  writer.WriteLine();
                  writer.WriteLine("<span class='keyword'>#End Region</span>");
               }

               if (routeContext != null) {

                  string display = routeContext.Length == 0 ? "(root)" : routeContext;

                  writer.WriteLine();
                  writer.Write("<span class='keyword'>#Region</span> ");
                  writer.Write(ValueToVBString(display));
                  writer.WriteLine();
               }
            }

            writer.WriteLine();
            RenderRouteVB(route);

            prevRouteContext = routeContext;
             }

             if (prevRouteContext != null) {
            writer.WriteLine();
            writer.Write("<span class='keyword'>#End Region</span>");
             }

             writer.Write("</body>");
             writer.Write("</html>");
        }
 public override IEnumerator <IHttpRoute> GetEnumerator() => _routeCollection.OfType <HttpWebRoute>().Select(r => r.HttpRoute).GetEnumerator();
Exemplo n.º 38
0
        public void Publish(IEnumerable <RouteDescriptor> routes, Func <IDictionary <string, object>, Task> env)
        {
            var routesArray = routes
                              .OrderByDescending(r => r.Priority)
                              .ToArray();

            // this is not called often, but is intended to surface problems before
            // the actual collection is modified
            var preloading = new RouteCollection();

            foreach (var routeDescriptor in routesArray)
            {
                // extract the WebApi route implementation
                var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor;
                if (httpRouteDescriptor != null)
                {
                    var httpRouteCollection = new RouteCollection();
                    httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults, httpRouteDescriptor.Constraints);
                    routeDescriptor.Route = httpRouteCollection.First();
                }

                preloading.Add(routeDescriptor.Name, routeDescriptor.Route);
            }


            using (_routeCollection.GetWriteLock()) {
                // existing routes are removed while the collection is briefly inaccessable
                _routeCollection
                .OfType <HubRoute>()
                .ToList().ForEach(x => x.ReleaseShell(_shellSettings));

                // HACK: For inserting names in internal dictionary when inserting route to RouteCollection.
                var routeCollectionType = typeof(RouteCollection);
                var namedMap            = (Dictionary <string, RouteBase>)routeCollectionType.GetField("_namedMap", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(_routeCollection);

                // new routes are added
                foreach (var routeDescriptor in routesArray)
                {
                    // Loading session state information.
                    var defaultSessionState = SessionStateBehavior.Default;

                    ExtensionDescriptor extensionDescriptor = null;
                    if (routeDescriptor.Route is Route)
                    {
                        object extensionId;
                        var    route = routeDescriptor.Route as Route;
                        if (route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) ||
                            route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId))
                        {
                            extensionDescriptor = _extensionManager.GetExtension(extensionId.ToString());
                        }
                    }
                    else if (routeDescriptor.Route is IRouteWithArea)
                    {
                        var route = routeDescriptor.Route as IRouteWithArea;
                        extensionDescriptor = _extensionManager.GetExtension(route.Area);
                    }

                    if (extensionDescriptor != null)
                    {
                        // if session state is not define explicitly, use the one define for the extension
                        if (routeDescriptor.SessionState == SessionStateBehavior.Default)
                        {
                            Enum.TryParse(extensionDescriptor.SessionState, true /*ignoreCase*/, out defaultSessionState);
                        }
                    }

                    // Route-level setting overrides module-level setting (from manifest).
                    var sessionStateBehavior = routeDescriptor.SessionState == SessionStateBehavior.Default ? defaultSessionState : routeDescriptor.SessionState;

                    var shellRoute = new ShellRoute(routeDescriptor.Route, _shellSettings, _workContextAccessor, _runningShellTable, env)
                    {
                        IsHttpRoute  = routeDescriptor is HttpRouteDescriptor,
                        SessionState = sessionStateBehavior
                    };

                    var area = extensionDescriptor == null ? "" : extensionDescriptor.Id;

                    var matchedHubRoute = _routeCollection.FirstOrDefault(x => {
                        var hubRoute = x as HubRoute;
                        if (hubRoute == null)
                        {
                            return(false);
                        }

                        return(routeDescriptor.Priority == hubRoute.Priority && hubRoute.Area.Equals(area, StringComparison.OrdinalIgnoreCase) && hubRoute.Name == routeDescriptor.Name);
                    }) as HubRoute;

                    if (matchedHubRoute == null)
                    {
                        matchedHubRoute = new HubRoute(routeDescriptor.Name, area, routeDescriptor.Priority, _runningShellTable);

                        int index;
                        for (index = 0; index < _routeCollection.Count; index++)
                        {
                            var hubRoute = _routeCollection[index] as HubRoute;
                            if (hubRoute == null)
                            {
                                continue;
                            }
                            if (hubRoute.Priority < matchedHubRoute.Priority)
                            {
                                break;
                            }
                        }

                        _routeCollection.Insert(index, matchedHubRoute);

                        // HACK: For inserting names in internal dictionary when inserting route to RouteCollection.
                        if (!string.IsNullOrEmpty(matchedHubRoute.Name) && !namedMap.ContainsKey(matchedHubRoute.Name))
                        {
                            namedMap[matchedHubRoute.Name] = matchedHubRoute;
                        }
                    }

                    matchedHubRoute.Add(shellRoute, _shellSettings);
                }
            }
        }
 private IReadOnlyCollection<RouteBase> GetAttributeRoutes(RouteCollection routes)
 {
     return routes.OfType<IReadOnlyCollection<RouteBase>>().Single();
 }
Exemplo n.º 40
0
        /// <summary>
        /// 发布路由。
        /// </summary>
        /// <param name="routes">路由集合。</param>
        public void Publish(IEnumerable <RouteDescriptor> routes)
        {
            //排序。
            var routesArray = routes
                              .OrderByDescending(r => r.Priority)
                              .ToArray();

            //发布前事件。
            _routePublisherEventHandlers.Invoke(i => i.Publishing(routesArray), NullLogger.Instance);

            using (_routeCollection.GetWriteLock())
            {
                //释放现有路由。
                _routeCollection
                .OfType <HubRoute>().Invoke(x => x.ReleaseShell(_shellSettings), NullLogger.Instance);
                var routeList = new List <RouteBase>(_routeCollection);

                //添加新路由
                foreach (var routeDescriptor in routesArray)
                {
                    //根据Route得到扩展描述符
                    ExtensionDescriptorEntry extensionDescriptor = null;
                    if (routeDescriptor.Route is Route)
                    {
                        object extensionId;
                        var    route = routeDescriptor.Route as Route;
                        if (route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) ||
                            route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId))
                        {
                            extensionDescriptor = _extensionManager.GetExtension(extensionId.ToString());
                        }
                    }
                    else if (routeDescriptor.Route is IRouteWithArea)
                    {
                        var route = routeDescriptor.Route as IRouteWithArea;
                        extensionDescriptor = _extensionManager.GetExtension(route.Area);
                    }

                    //加载会话状态信息。
                    var sessionState = SessionStateBehavior.Default;
                    if (extensionDescriptor != null)
                    {
                        if (routeDescriptor.SessionState == SessionStateBehavior.Default)
                        {
                            var descriptor = extensionDescriptor.Descriptor;
                            if (descriptor.Keys.Contains("SessionState"))
                            {
                                Enum.TryParse(descriptor["SessionState"], true, out sessionState);
                            }
                        }
                    }

                    //设置SessionState
                    var sessionStateBehavior = routeDescriptor.SessionState == SessionStateBehavior.Default
                        ? sessionState
                        : routeDescriptor.SessionState;

                    //创建外壳路由
                    var shellRoute = new ShellRoute(routeDescriptor.Route, _shellSettings, _webWorkContextAccessor,
                                                    _runningShellTable)
                    {
                        IsHttpRoute  = routeDescriptor is HttpRouteDescriptor,
                        SessionState = sessionStateBehavior
                    };

                    //区域
                    var area = extensionDescriptor == null ? string.Empty : extensionDescriptor.Id;

                    //尝试查找已存在的集线器路由
                    var matchedHubRoute = routeList.FirstOrDefault(x =>
                    {
                        var hubRoute = x as HubRoute;
                        if (hubRoute == null)
                        {
                            return(false);
                        }

                        return(routeDescriptor.Priority == hubRoute.Priority &&
                               hubRoute.Area.Equals(area, StringComparison.OrdinalIgnoreCase) &&
                               hubRoute.Name == routeDescriptor.Name);
                    }) as HubRoute;

                    //创建新的集线器路由。
                    if (matchedHubRoute == null)
                    {
                        matchedHubRoute = new HubRoute(routeDescriptor.Name, area, routeDescriptor.Priority,
                                                       _runningShellTable);

                        int index;
                        for (index = 0; index < routeList.Count; index++)
                        {
                            var hubRoute = routeList[index] as HubRoute;
                            if (hubRoute == null)
                            {
                                continue;
                            }
                            if (hubRoute.Priority < matchedHubRoute.Priority)
                            {
                                break;
                            }
                        }
                        routeList.Insert(index, matchedHubRoute);
                    }

                    matchedHubRoute.Add(shellRoute, _shellSettings);
                }

                //清空现有路由。
                _routeCollection.Clear();
                foreach (var item in routeList)
                {
                    if (item is HubRoute)
                    {
                        _routeCollection.Add((item as HubRoute).Name, item);
                    }
                    else
                    {
                        _routeCollection.Add(item);
                    }
                }
            }

            //发布后事件。
            _routePublisherEventHandlers.Invoke(i => i.Published(routesArray), NullLogger.Instance);
        }
Exemplo n.º 41
0
        public void Publish(IEnumerable <RouteDescriptor> routes)
        {
            var routesArray = routes
                              .OrderByDescending(r => r.Priority)
                              .ToArray();

            // this is not called often, but is intended to surface problems before
            // the actual collection is modified
            var preloading = new RouteCollection();

            foreach (var routeDescriptor in routesArray)
            {
                // extract the WebApi route implementation
                var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor;
                if (httpRouteDescriptor != null)
                {
                    var httpRouteCollection = new RouteCollection();
                    httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults);
                    routeDescriptor.Route = httpRouteCollection.First();
                }

                preloading.Add(routeDescriptor.Name, routeDescriptor.Route);
            }

            using (routeCollection.GetWriteLock())
            {
                // existing routes are removed while the collection is briefly inaccessable
                var cropArray = routeCollection
                                .OfType <ShellRoute>()
                                .Where(sr => sr.ShellSettingsName == shellSettings.Name)
                                .ToArray();

                foreach (var crop in cropArray)
                {
                    routeCollection.Remove(crop);
                }

                // new routes are added
                foreach (var routeDescriptor in routesArray)
                {
                    // Loading session state information.
                    var defaultSessionState = SessionStateBehavior.Default;

                    ExtensionDescriptor extensionDescriptor = null;
                    if (routeDescriptor.Route is Route)
                    {
                        object extensionId;
                        var    route = routeDescriptor.Route as Route;
                        if (route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) ||
                            route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId))
                        {
                            extensionDescriptor = extensionManager.GetExtension(extensionId.ToString());
                        }
                    }
                    else if (routeDescriptor.Route is IRouteWithArea)
                    {
                        var route = routeDescriptor.Route as IRouteWithArea;
                        extensionDescriptor = extensionManager.GetExtension(route.Area);
                    }

                    if (extensionDescriptor != null)
                    {
                        // if session state is not define explicitly, use the one define for the extension
                        if (routeDescriptor.SessionState == SessionStateBehavior.Default)
                        {
                            Enum.TryParse(extensionDescriptor.SessionState, true /*ignoreCase*/, out defaultSessionState);
                        }
                    }

                    // Route-level setting overrides module-level setting (from manifest).
                    var sessionStateBehavior = routeDescriptor.SessionState == SessionStateBehavior.Default ? defaultSessionState : routeDescriptor.SessionState;

                    var shellRoute = new ShellRoute(routeDescriptor.Route, shellSettings, workContextAccessor, runningShellTable)
                    {
                        IsHttpRoute  = routeDescriptor is HttpRouteDescriptor,
                        SessionState = sessionStateBehavior
                    };
                    routeCollection.Add(routeDescriptor.Name, shellRoute);
                }
            }
        }