Virtual Happy Hour this month, Jun 28, we'll be getting a sneak preview at our soon to launch SaaS CMS!

Try our conversational search powered by Generative AI!

Custom routing without {node} segment in url



I want to add a route to my RouteConfig which 'redirects' a user from one page to another.

I have "Login" page with a LoginPageController and a Index action. My default route is wokring fine:


                new { action = "Index", id = UrlParameter.Optional }


Now I want to create a new route which handles alle requests going to "/welcome/{id}" to this login page.

When I do this, I get the following error: "The provided content link does not have a value". This error is thrown by the Get<T> method in EPiServer.DataFactory.

This is my route configuration:

                new { action = "Index", node = "Login" }

How can I fix this? Is this possible? Maybe I should use MapContentRouteParameters?

Hope somebody can help

Apr 01, 2014 12:07

If your route is not for content (that is it is a "standard" ASP.NET route) then you could consider using MapRoute extension method from System.Web.Mvc instead for MapContentRoute.

Apr 01, 2014 14:02

No it is for content. My LoginPage is a contentpage, I just want that /welcome/{id} also reaches my LoginPage.

Apr 01, 2014 14:09

Somehow none of the content routes are working. I created a page named WelcomePage so the default route i defined should kick in:

                new { action = "Index", id = UrlParameter.Optional }


/Welcome is working, /Welcome/Index is working /Welcome/Index/1 is not working. /Welcome/Index?id=1 is working. It turns out that my url is being resolved by the default MVC route:

                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }


When I remove this route i still got an error, only a different one. It really looks like somehow this route defnition is not matched. None of the MapContentRoute definitions are working.

I tried creating a custom Segment but my RouteDataMatch and GetVirtualPathSegment are not being hit.

Edited, Apr 01, 2014 15:31

I have not tried any of suggestions below but theoretically I think both should be possible..

If you go for the "default" MVC route you should probably register it after the CMS routes, you could aciehve this by doing registration in an event handler to EPiServer.Global.RoutesRegistered

If you go for a CMS route you will need to set the route to start route at the contentreference for your login page. Something like:

            var segmentRouter = ServiceLocator.Current.GetInstance<IUrlSegmentRouter>();
            segmentRouter.RootResolver = (sd) => referenceToYourLoginPage;
            MapContentRouteParameters parameters = new MapContentRouteParameters()
                UrlSegmentRouter = segmentRouter,
                Direction = SupportedDirection.Incoming

                new { action = "Index", id = UrlParameter.Optional }

            routes.MapContentRoute(name, url, defaults, parameters);

    Then the routing will start at your login page, {node} segment will not consume any segment from url but it is required since it will set the routed content to login page.

Apr 01, 2014 15:55
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.