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); }
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(); }