private static ControllerSummary locateController(ICMSRequest pageRequest, ref string controller) { var schema = (pageRequest as ICMSPageTypeRequest).Schema; var matchingController = controllerSummaries.Where( c => !string.IsNullOrEmpty(schema) && c.Name == schema + "Controller") .FirstOrDefault(); if (matchingController != null) { controller = schema; } return(matchingController); }
private ActionResult rewriteToCmsPath(string pageId, Dictionary <string, string> queryStrings) { //present download page that hosts this download CMSPageDefaultController pageController = initPageController(); //get page by id ICMSRequest interceptPage = pageController._PageFactory.GetPage(Request, pageId); //add 3 query strings foreach (var pair in queryStrings) { (interceptPage as ICMSEnvironment).QueryString.Add(pair.Key, pair.Value); } //redo page content to reserialize the querystrings (interceptPage as CMSPageRequest).GetPageContent(); setNoCache(); return(pageController.viewOrXsltFallback(interceptPage as CMSPageRequest)); }
protected virtual ActionResult handleRequest(Func <ICMSRoutingRequest, ActionResult> nonCmsRouteHandle, Func <CMSPageRequest, string, ActionResult> remainingPathHandle, Func <CMSPageRequest, ActionResult> standardCmsPageHandle) { if (_InvalidPageResult != null) { return(_InvalidPageResult); } if (_AllowTfrm) { //exception for settings.xml and urlmap.xml, allow them to display only if string path = Request.Url.AbsolutePath.ToLower(); if (path.EndsWith("settings/settings.xml") || path.EndsWith("settings/urlmap.xml")) { var relativePath = path.Substring(Request.ApplicationPath.Length); string filePath = Path.Combine(_SitePath, relativePath.TrimStart('/').Replace("/", @"\")); if (System.IO.File.Exists(filePath)) { return(new XmlResult(XDocument.Load(filePath))); } } } if (_CMSPageRoutingRequest.CMSRequest == null || !_CMSPageRoutingRequest.CMSRequest.Exists) { return(nonCmsRouteHandle(_CMSPageRoutingRequest)); } ICMSRequest cmsRequest = _CMSPageRoutingRequest.CMSRequest; //if the request is for redirection, do redirect if (cmsRequest is CMSPageRedirectRequest) { var cmsRedir = cmsRequest as CMSPageRedirectRequest; //string absoluteUrl = cmsRedir.FinalUrl.ToAbsoluteUrl(); string absoluteUrl = cmsRedir.FinalUrl; if (!absoluteUrl.StartsWith("http://") && !absoluteUrl.StartsWith("https://")) { absoluteUrl = VirtualPathUtility.ToAbsolute("~/" + absoluteUrl.TrimStart('/')); } if (cmsRedir.NoRedirectCache) { Response.Expires = -1; Response.Cache.SetCacheability(HttpCacheability.NoCache); } if (cmsRedir.IsPermanent) { Response.RedirectPermanent(absoluteUrl); } else { Response.Redirect(absoluteUrl); } return(null); } else if (cmsRequest is CMSPageRequest) { CMSPageRequest pageRequest = cmsRequest as CMSPageRequest; //first handle requests with remaining path, if the method doesn't return any result, proceed //to treat it as a standard CMS page string remainigPath = _CMSPageRoutingRequest.RemaingPath; if (!string.IsNullOrEmpty(remainigPath)) { ActionResult cmsWithRemainingPathResult = remainingPathHandle(pageRequest, remainigPath); if (cmsWithRemainingPathResult != null) { return(cmsWithRemainingPathResult); } } if (pageRequest.RestrictedAccess) { disableClientSideCaching(); } return(standardCmsPageHandle(pageRequest)); } else { throw new HttpException(501, Ingeniux.Runtime.Properties.Resources.RequestTypeNotRecognized); } }
public override RouteData GetRouteData(HttpContextBase httpContext) { if (string.IsNullOrWhiteSpace(_BaseController)) { _BaseController = ConfigurationManager.AppSettings["BaseControllerName"] .ToNullOrEmptyHelper() .Return(DEFAULT_CONTROLLER_NAME); } ICMSRequest pageRequest = null; RouteData data = null; string action = defaultAction; string controller = _BaseController; string appPath = httpContext.Request.ApplicationPath; if (appPath == "/") { appPath = string.Empty; } string relativePath = httpContext.Request.Path.Substring(appPath.Length).ToLowerInvariant(); if (relativePath.StartsWith("/igxdtpreview")) { pageRequest = _PageFactory.GetPreviewPage(httpContext.Request, true); // because the preview does not get a url, but rather an id and xml, // it is not possible to look for other actions based on the URL action = "Preview"; locateController(pageRequest, ref controller); data = createRouteData(action, controller); } if (relativePath.StartsWith("/igxdynamicpreview") || _PageFactory == null) { action = "DynamicPreview"; try { CMS.IContentStore contentStore = CMSPageFactoryHelper.GetPreviewContentStore(httpContext.Request.RequestContext, _SitePath); CMS.IReadonlyUser currentUser = CMSPageFactoryHelper.GetPreviewCurrentUser(contentStore, httpContext.Request.RequestContext, httpContext.Session); _PageFactory = new DocumentPreviewPageFactory(contentStore, currentUser, _SitePath); _PageFactory.CacheSiteControls = false; pageRequest = _PageFactory.GetDynamicPreviewPage(httpContext.Request, true, true); // because the preview does not get a url, but rather an id and xml, // it is not possible to look for other actions based on the URL locateController(pageRequest, ref controller); } catch { controller = "CMSPageDefault"; } data = createRouteData(action, controller); } else { //only need the schema data, not the whole page ICMSRoutingRequest routingRequest = _PageFactory.GetPage(httpContext.Request, true); if (routingRequest != null && routingRequest.CMSRequest != null && routingRequest.CMSRequest.Exists) { pageRequest = routingRequest.CMSRequest; if (pageRequest != null) { //use default controller for routing request if (pageRequest is CMSPageRedirectRequest) { data = createRouteData(defaultAction, controller); } else { var matchingController = locateController(pageRequest, ref controller); if (!string.IsNullOrEmpty(routingRequest.RemaingPath.Trim('/'))) { //use the first section of the remaining path as action, this is arbitrary. string actionInPath = routingRequest.RemaingPath.Trim('/').SubstringBefore("/"); //if the controller doesn't have this action, use default action action = matchingController.ToNullHelper() .Propagate( c => c.ActionNames .Where(an => an.ToLowerInvariant() == actionInPath.ToLowerInvariant()) .FirstOrDefault()) .Return(defaultAction); //get the remaining path in the controller action itself } else { action = defaultAction; } data = createRouteData(action, controller); } } else { data = createRouteData(defaultAction, controller); } } else { data = createRouteData(defaultAction, controller); } } return(data); }