public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { // If no document found anyway, then it will always be a match TreeNode FoundDoc = DocumentQueryHelper.GetNodeByAliasPath(EnvironmentHelper.GetUrl(httpContext.Request)); return(FoundDoc != null && (FoundDoc.NodeAliasPath != "/" || !IgnoreRootPage)); }
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { // Don't use dynamic routing for this {controller}/* route. 'KenticoFormWidget' is the OOB Kentico Forms widget in the default installation. string ControllerName = (values.ContainsKey("controller") ? ValidationHelper.GetString(values["controller"], "") : ""); if (ControllerName.Equals("KenticoFormWidget", StringComparison.InvariantCultureIgnoreCase)) { return(false); } // If no document found anyway, then it will always be a match TreeNode FoundDoc = DocumentQueryHelper.GetNodeByAliasPath(EnvironmentHelper.GetUrl(httpContext.Request)); return(FoundDoc != null && (FoundDoc.NodeAliasPath != "/" || !IgnoreRootPage)); }
public void ProcessRequest(HttpContext context) { IController controller = null; IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); string DefaultController = (RequestContext.RouteData.Values.ContainsKey("controller") ? RequestContext.RouteData.Values["controller"].ToString() : ""); string DefaultAction = (RequestContext.RouteData.Values.ContainsKey("action") ? RequestContext.RouteData.Values["action"].ToString() : ""); string NewController = ""; string NewAction = "Index"; // Get the classname based on the URL TreeNode FoundNode = DocumentQueryHelper.GetNodeByAliasPath(context.Request.Url.AbsolutePath); string ClassName = FoundNode.ClassName; switch (ClassName.ToLower()) { case "": break; // can add your own cases to do more advanced logic if you wish default: // Default will look towards the classname (period replaced with _) for the Controller NewController = ClassName.Replace(".", "_"); break; } // Controller not found, use defaults if (string.IsNullOrWhiteSpace(NewController)) { NewController = DefaultController; NewAction = DefaultAction; } // Setup routing with new values this.RequestContext.RouteData.Values["Controller"] = NewController; // If there is an action (2nd value), change it to the CheckNotFound, and remove ID if (this.RequestContext.RouteData.Values.ContainsKey("Action")) { this.RequestContext.RouteData.Values["Action"] = NewAction; } else { this.RequestContext.RouteData.Values.Add("Action", NewAction); } if (RequestContext.RouteData.Values.ContainsKey("Id")) { RequestContext.RouteData.Values.Remove("Id"); } try { controller = factory.CreateController(RequestContext, NewController); controller.Execute(RequestContext); } catch (HttpException ex) { // Even that failed, log and use normal HttpErrors controller EventLogProvider.LogException("KMVCDynamicHttpHandler", "ClassControllerNotConfigured", ex, additionalMessage: "Page found, but could not find a Controller for " + NewController + ", create one with an index view to auto handle or modify the KMVCDynamicHttpHandler"); RequestContext.RouteData.Values["Controller"] = DefaultController; RequestContext.RouteData.Values["Action"] = DefaultAction; controller = factory.CreateController(RequestContext, DefaultController); controller.Execute(RequestContext); } factory.ReleaseController(controller); }
public void ProcessRequest(HttpContext context) { IController controller = null; IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); string DefaultController = (RequestContext.RouteData.Values.ContainsKey("controller") ? RequestContext.RouteData.Values["controller"].ToString() : ""); string DefaultAction = (RequestContext.RouteData.Values.ContainsKey("action") ? RequestContext.RouteData.Values["action"].ToString() : ""); string NewController = ""; string NewAction = "Index"; // Get the classname based on the URL TreeNode FoundNode = DocumentQueryHelper.GetNodeByAliasPath(EnvironmentHelper.GetUrl(context.Request)); string ClassName = FoundNode.ClassName; switch (ClassName.ToLower()) { default: // if (PageHasTemplate(FoundNode)) { // Uses Page Templates, send to basic Page Template handler NewController = "DynamicPageTemplate"; NewAction = "Index"; } else { // Try finding a class that matches the class name NewController = ClassName.Replace(".", "_"); } break; // can add your own cases to do more advanced logic if you wish case "": break; } // Controller not found, use defaults if (string.IsNullOrWhiteSpace(NewController)) { NewController = DefaultController; NewAction = DefaultAction; } // Setup routing with new values this.RequestContext.RouteData.Values["Controller"] = NewController; // If there is an action (2nd value), change it to the CheckNotFound, and remove ID if (this.RequestContext.RouteData.Values.ContainsKey("Action")) { this.RequestContext.RouteData.Values["Action"] = NewAction; } else { this.RequestContext.RouteData.Values.Add("Action", NewAction); } if (RequestContext.RouteData.Values.ContainsKey("Id")) { RequestContext.RouteData.Values.Remove("Id"); } try { controller = factory.CreateController(RequestContext, NewController); controller.Execute(RequestContext); } catch (HttpException ex) { // Catch Controller Not implemented errors and log and go to Not Foud if (ex.Message.ToLower().Contains("does not implement icontroller.")) { EventLogProvider.LogException("KMVCDynamicHttpHandler", "ClassControllerNotConfigured", ex, additionalMessage: "Page found, but could not find Page Templates, nor a Controller for " + NewController + ", either create Page Templates for this class or create a controller with an index view to auto handle or modify the KMVCDynamicHttpHandler"); RequestContext.RouteData.Values["Controller"] = "DynamicPageTemplate"; RequestContext.RouteData.Values["Action"] = "NotFound"; controller = factory.CreateController(RequestContext, "DynamicPageTemplate"); controller.Execute(RequestContext); } else { // This will show for any http generated exception, like view errors throw new HttpException(ex.Message, ex); } } catch (InvalidOperationException ex) { if (ex.Message.ToLower().Contains("page template with identifier")) { // This often occurs when there is a page template assigned that is not defined EventLogProvider.LogException("KMVCDynamicHttpHandler", "ClassControllerNotConfigured", ex, additionalMessage: "Page found, but contains a template that is not registered with this application."); RequestContext.RouteData.Values["Controller"] = "DynamicPageTemplate"; RequestContext.RouteData.Values["Action"] = "UnregisteredTemplate"; controller = factory.CreateController(RequestContext, "DynamicPageTemplate"); controller.Execute(RequestContext); } else { throw new InvalidOperationException(ex.Message, ex); } } factory.ReleaseController(controller); }