Example #1
0
        private void InjectMvcRoute() {
            var route = new CmsRoute("{cmsPageUrl}/{action}", new MvcRouteHandler()) {
                Constraints = new RouteValueDictionary { {"cmsPageUrl", new CmsRouteConstraint()} },
                Defaults = new RouteValueDictionary { { "action", "Index" } }
            };

            RouteTable.Routes.Insert(0, route);
        }
Example #2
0
        public static void RedirectToControllerAction(CmsPage page, string[] parameters) {
            if (!page.IsAvailable) {
                PageHasExpired();
                return;
            }

            var type = GetControllerType(page);
            var controller = (Controller)Activator.CreateInstance(type);
            var controllerName = StripEnd(type.Name.ToLowerInvariant(), "controller");
            var httpContext = new HttpContextWrapper(HttpContext.Current);
            var route = new CmsRoute(page.PageUrl.ToString().TrimStart('/') + "{action}", new MvcRouteHandler());
            var routeData = route.GetRouteData(httpContext);

            if (routeData == null)
            {
                var message = string.Format("Not an action /{0}/{1}/", controllerName, string.Join("/", parameters));
                throw new Exception(message);
            }

            routeData.Values["controller"] = controllerName;
            routeData.Values["currentPage"] = ((IPageController)controller).GetTypedPage(page);

            HttpContext.Current.Response.Clear();
            var requestContext = new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData);
            ((IController)controller).Execute(requestContext);
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }