An ASP.NET MVC route that gets route data for content item paths.
Inheritance: System.Web.Routing.RouteBase
Esempio n. 1
0
        /// <summary>Maps a content route to the route collection.</summary>
        /// <param name="routes">The route collection to extend.</param>
        /// <param name="name">The name of this route.</param>
        /// <param name="engine">The N2 Engine instance used by the content route.</param>
        /// <returns>The added content route instance.</returns>
        public static ContentRoute MapContentRoute <T>(this AreaRegistrationContext arc)
            where T : ContentItem
        {
            var state = arc.State as AreaRegistrationState;

            if (state == null)
            {
                throw new ArgumentException("The area registration context didn't contain an AreaRegistrationState.", "arc");
            }
            if (state.Engine == null)
            {
                throw new ArgumentException("The area registration state an IEngine.", "arc");
            }

            var routeHandler     = new MvcRouteHandler();
            var controllerMapper = state.Engine.Resolve <IControllerMapper>();
            var innerRoute       = new Route("{area}/{controller}/{action}",
                                             new RouteValueDictionary(new { action = "Index" }),
                                             new RouteValueDictionary(),
                                             new RouteValueDictionary(new { engine = state.Engine, area = arc.AreaName }),
                                             routeHandler);

            var cr = new ContentRoute <T>(state.Engine, routeHandler, controllerMapper, innerRoute);

            arc.Routes.Add(arc.AreaName + "_" + typeof(T).FullName, cr);
            return(cr);
        }
Esempio n. 2
0
        /// <summary>Maps a content route to the route collection.</summary>
        /// <param name="routes">The route collection to extend.</param>
        /// <param name="name">The name of this route.</param>
        /// <param name="engine">The N2 Engine instance used by the content route.</param>
        /// <returns>The added content route instance.</returns>
        public static ContentRoute MapContentRoute(this RouteCollection routes, string name, IEngine engine)
        {
            var cr = new ContentRoute(engine);

            routes.Add(name, cr);
            return(cr);
        }
Esempio n. 3
0
        /// <summary>Maps a content route to the route collection.</summary>
        /// <param name="routes">The route collection to extend.</param>
        /// <param name="name">The name of this route.</param>
        /// <param name="engine">The N2 Engine instance used by the content route.</param>
        /// <typeparam name="T">The type of content items to route.</typeparam>
        /// <returns>The added content route instance.</returns>
        public static ContentRoute MapContentRoute <T>(this RouteCollection routes, string name, IEngine engine)
            where T : ContentItem
        {
            var cr = new ContentRoute <T>(engine);

            routes.Add(name, cr);
            return(cr);
        }
        public virtual void RegisterArea(RouteCollection routes, ViewEngineCollection viewEngines, IEngine engine)
        {
            var route = new ContentRoute<IManagementHomePart>(engine);
            routes.Insert(0, route);

            var viewLocationFormats = new[] { Url.ResolveTokens("{ManagementUrl}/Myself/Analytics/Views/{1}/{0}.ascx"), Url.ResolveTokens("{ManagementUrl}/Myself/Analytics/Views/Shared/{0}.ascx") };
            viewEngines.Insert(0, new PrivateViewEngineDecorator(new WebFormViewEngine { AreaViewLocationFormats = viewLocationFormats, PartialViewLocationFormats = viewLocationFormats }, route));
        }
        /// <summary>Maps a content route to the route collection.</summary>
        /// <param name="routes">The route collection to extend.</param>
        /// <param name="name">The name of this route.</param>
        /// <param name="engine">The N2 Engine instance used by the content route.</param>
        /// <typeparam name="T">The type of content items to route.</typeparam>
        /// <returns>The added content route instance.</returns>
        public static ContentRoute MapContentRoute <T>(this RouteCollection routes, string name, IEngine engine)
        {
            var nonContentRoutesNorGenericRoutes = SelectRoutesWithIndices(routes)
                                                   .Where(x => !(x.Value is ContentRoute) || !x.Value.GetType().ContainsGenericParameters);
            int indexOfFirstNonContentRoute = nonContentRoutesNorGenericRoutes.Any()
                                ? nonContentRoutesNorGenericRoutes.Select(i => i.Key).FirstOrDefault()
                                : routes.Count;

            var cr = new ContentRoute <T>(engine);

            routes.Insert(indexOfFirstNonContentRoute, cr);
            return(cr);
        }
        /// <summary>Maps a content route to the route collection.</summary>
        /// <param name="routes">The route collection to extend.</param>
        /// <param name="name">The name of this route.</param>
        /// <param name="engine">The N2 Engine instance used by the content route.</param>
        /// <returns>The added content route instance.</returns>
        public static ContentRoute MapContentRoute(this RouteCollection routes, string name, IEngine engine)
        {
            var nonContentRoutes = SelectRoutesWithIndices(routes)
                                   .Where(x => !(x.Value is ContentRoute));
            int indexOfFirstNonContentRoute = nonContentRoutes.Any()
                                ? nonContentRoutes.Select(i => i.Key).FirstOrDefault()
                                : routes.Count;

            var cr = new ContentRoute(engine);

            routes.Insert(indexOfFirstNonContentRoute, cr);
            return(cr);
        }
Esempio n. 7
0
        private static ContentRoute MapContentRoute(this RouteCollection routes, string name, IEngine engine, string url, object defaults, object constraints, string[] namespaces)
        {
            var   rh         = new MvcRouteHandler();
            Route innerRoute = new Route(url, rh);

            innerRoute.Defaults    = new RouteValueDictionary(defaults);
            innerRoute.Constraints = new RouteValueDictionary(constraints);
            innerRoute.DataTokens  = new RouteValueDictionary();
            if ((namespaces != null) && (namespaces.Length > 0))
            {
                innerRoute.DataTokens["Namespaces"] = namespaces;
            }

            var cr = new ContentRoute(engine, rh, null, innerRoute);

            routes.Add(name, cr);
            return(cr);
        }
        public override void SetUp()
        {
            base.SetUp();

            root = CreateOneItem<RegularPage>(1, "root", null);
            about = CreateOneItem<AboutUsSectionPage>(2, "about", root);
            executives = CreateOneItem<ExecutiveTeamPage>(3, "executives", about);
            search = CreateOneItem<SearchPage>(4, "search", root);

            var typeFinder = new FakeTypeFinder2();
            typeFinder.typeMap[typeof(ContentItem)] = this.NearbyTypes()
                .BelowNamespace("N2.Extensions.Tests.Mvc.Models").AssignableTo<ContentItem>().Union(typeof(ContentItem)).ToArray();
            typeFinder.typeMap[typeof(IController)] = this.NearbyTypes()
                .BelowNamespace("N2.Extensions.Tests.Mvc.Controllers").AssignableTo<IController>().Except(typeof(AnotherRegularController))
                .ToArray();

            var changer = new StateChanger();
            var definitions = new DefinitionManager(new[] { new DefinitionProvider(new DefinitionBuilder(new DefinitionMap(), typeFinder, new TransformerBase<IUniquelyNamed>[0], TestSupport.SetupEngineSection())) }, new ITemplateProvider[0], new ContentActivator(changer, null, new EmptyProxyFactory()), changer);
            httpContext = new FakeHttpContext();
            var webContext = new FakeWebContextWrapper(httpContext);
            var host = new Host(webContext, root.ID, root.ID);
            var parser = TestSupport.Setup(persister, webContext, host);
            controllerMapper = new ControllerMapper(typeFinder, definitions);
            Url.DefaultExtension = "";
            N2.Web.Url.ApplicationPath = "/";

            engine = mocks.DynamicMock<IEngine>();
            SetupResult.For(engine.Resolve<ITypeFinder>()).Return(typeFinder);
            SetupResult.For(engine.Definitions).Return(definitions);
            SetupResult.For(engine.UrlParser).Return(parser);
            SetupResult.For(engine.Persister).Return(persister);
            SetupResult.For(engine.Resolve<RequestPathProvider>()).Return(new RequestPathProvider(webContext, parser, new ErrorNotifier(), new HostSection()));
            var editUrlManager = new FakeEditUrlManager();
            SetupResult.For(engine.ManagementPaths).Return(editUrlManager);
            engine.Replay();

            route = new ContentRoute(engine, new MvcRouteHandler(), controllerMapper, null);

            routes = new RouteCollection { route };
        }
        /// <summary>Maps a content route to the route collection.</summary>
        /// <param name="routes">The route collection to extend.</param>
        /// <param name="name">The name of this route.</param>
        /// <param name="engine">The N2 Engine instance used by the content route.</param>
        /// <param name="append">Append is useful in scenarios where you want to override the routing of specific urls also considered by N2.</param>
        /// <param name="append">Append is useful in scenarios where you want to override the routing of specific urls also considered by N2.</param>
        /// <param name="stopRewritableItems">Make the route table stop at items that match an item that can be rewritten to (probably webforms).</param>
        /// <param name="namespaces">The namespaces the routing engine will look for the controller in</param>
        /// <returns>The added content route instance.</returns>
        public static ContentRoute MapContentRoute(this RouteCollection routes, string name, IEngine engine, bool append = false, bool stopRewritableItems = true, string[] namespaces = null)
        {
            var cr = new ContentRoute(engine, null, null, null, namespaces)
            {
                StopRewritableItems = stopRewritableItems
            };

            if (append)
            {
                routes.Add(cr);
                return(cr);
            }

            var nonContentRoutes = SelectRoutesWithIndices(routes)
                                   .Where(x => !(x.Value is ContentRoute));
            int indexOfFirstNonContentRoute = nonContentRoutes.Any()
                                ? nonContentRoutes.Select(i => i.Key).FirstOrDefault()
                                : routes.Count;

            routes.Insert(indexOfFirstNonContentRoute, cr);
            return(cr);
        }
Esempio n. 10
0
        public override void SetUp()
        {
            base.SetUp();

            root = CreateOneItem<RegularPage>(1, "root", null);
            about = CreateOneItem<AboutUsSectionPage>(2, "about", root);
            executives = CreateOneItem<ExecutiveTeamPage>(3, "executives", about);
            search = CreateOneItem<SearchPage>(4, "search", root);

            var typeFinder = new FakeTypeFinder2();
            typeFinder.typeMap[typeof(ContentItem)] = this.NearbyTypes()
                .BelowNamespace("N2.Extensions.Tests.Mvc.Models").AssignableTo<ContentItem>().Union(typeof(ContentItem)).ToArray();
            typeFinder.typeMap[typeof(IController)] = this.NearbyTypes()
                .BelowNamespace("N2.Extensions.Tests.Mvc.Controllers").AssignableTo<IController>().Except(typeof(AnotherRegularController))
                .ToArray();

            var editUrlManager = new FakeEditUrlManager();
            var definitions = new DefinitionManager(new DefinitionBuilder(typeFinder, new EngineSection(), editUrlManager), new N2.Edit.Workflow.StateChanger(), null, new EmptyProxyFactory());
            var webContext = new ThreadContext();
            var host = new Host(webContext, root.ID, root.ID);
            var parser = new UrlParser(persister, webContext, host, new HostSection());
            controllerMapper = new ControllerMapper(typeFinder, definitions);
            Url.DefaultExtension = "";

            engine = mocks.DynamicMock<IEngine>();
            SetupResult.For(engine.Resolve<ITypeFinder>()).Return(typeFinder);
            SetupResult.For(engine.Definitions).Return(definitions);
            SetupResult.For(engine.UrlParser).Return(parser);
            SetupResult.For(engine.Persister).Return(persister);
            SetupResult.For(engine.ManagementPaths).Return(editUrlManager);
            engine.Replay();

            route = new ContentRoute(engine, new MvcRouteHandler(), controllerMapper, null);

            httpContext = new FakeHttpContext();
            routes = new RouteCollection { route };
        }