protected override void Initialize(System.Web.Routing.RequestContext requestContext) { base.Initialize(requestContext); _SitePath = CmsRoute.GetSitePath(); _DTSitePath = ConfigurationManager.AppSettings["DesignTimeAssetsLocation"] .ToNullOrEmptyHelper() .Return(_SitePath); _AllowTfrm = ConfigurationManager.AppSettings["EnableTFRMParameter"].ToNullHelper().Branch( str => str.Trim().ToLowerInvariant() == "true", () => true); _LegacyTransformation = ConfigurationManager.AppSettings["LegacyRendering"].ToNullHelper() .Branch( str => str.Trim().ToLowerInvariant() != "false", () => true); _UseTempStylesheetsLocation = ConfigurationManager.AppSettings["UseTempStylesheetsLocation"].ToNullHelper().Branch(str => str.Trim().ToLowerInvariant() != "false", () => true); _IsDesignTime = Reference.Reference.IsDesignTime(_SitePath); try { //page factory is a cheap object to construct, since both surl map and ssmap are cached most time _PageFactory = CMSPageFactoryHelper.GetPageFactory(_IsDesignTime, _SitePath, requestContext, _LegacyTransformation, out _IsDTAuthenticated) as CMSPageFactory; } catch (Ingeniux.CMS.Exceptions.LicensingException e) { if (e.Expired) { _InvalidPageResult = new XmlResult( new XElement("TrialLicenseExpired", new XAttribute("ExpirationDateUTC", e.ExpirationDate.ToIso8601DateString(true)), new XElement("IngeniuxSupport", new XAttribute("Phone", "1.877.299.8900"), new XAttribute("Email", "*****@*****.**"), new XAttribute("Portal", "http://support.ingeniux.com/")))); } else { _InvalidPageResult = new XmlResult( new XElement("InvalidCMSLicense", new XElement("IngeniuxSupport", new XAttribute("Phone", "1.877.299.8900"), new XAttribute("Email", "*****@*****.**"), new XAttribute("Portal", "http://support.ingeniux.com/")))); } } if (_InvalidPageResult == null) { if (_PageFactory.CacheSiteControls) { // only set site control schemas when list is not empty string[] siteControlSchemas = ConfigurationManager.AppSettings["SiteControlSchemas"].ToNullHelper().Branch <string[]>( str => str.Split(';').Select( s => s.Trim()).Where( s => s != "").ToArray(), () => new string[] { }); if (siteControlSchemas.Length > 0) { _PageFactory.SiteControlSchemas = siteControlSchemas; } } _PageFactory.LocalExportsIncludeLinks = ConfigurationManager.AppSettings["LocalExportsIncludeLinks"].ToNullHelper().Branch <bool>( str => str.Trim().ToLowerInvariant() == "true", () => true); //move page getting to here so it can be used to OnActionExecuting try { _CMSPageRoutingRequest = _PageFactory.GetPage(Request, false); } catch (DesignTimeInvalidPageIDException exp) { //this message is exclusive to design time and need to present a special page _InvalidPageResult = new XmlResult(new XElement("DynamicPreviewError", exp.Message)); } } if (_CMSPageRoutingRequest != null && string.IsNullOrWhiteSpace(_CMSPageRoutingRequest.RemaingPath)) { HttpContext.Items["PageRequest"] = _CMSPageRoutingRequest; } }
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); }
/// <summary> /// Get called when routingRequest not pointing to CMS page /// Default behavior is to introduce 404 error. /// </summary> /// <param name="routingRequest"></param> protected virtual ActionResult handleNoneCmsPageRoute(ICMSRoutingRequest routingRequest) { //throw 404 error, and let the 404 page handle it throw new HttpException(404, Ingeniux.Runtime.Properties.Resources.CannotLocateIngeniuxCMSPage); }
protected ActionResult handleRequest(Func <ICMSRoutingRequest, ActionResult> nonCmsRouteHandle, Func <CMSPageRequest, string, ActionResult> remainingPathHandle, Func <CMSPageRequest, ActionResult> standardCmsPageHandle) { 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))); } } } try { _CMSPageRoutingRequest = _PageFactory.GetPage(Request, false); } catch (DesignTimeInvalidPageIDException exp) { //this message is exclusive to design time and need to present a special page return(new XmlResult(new XElement("DynamicPreviewError", exp.Message))); } 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); } }