public void ProcessRequest(HttpContext context) { var factory = ControllerBuilder.Current.GetControllerFactory(); var defaultController = this.HttpRequestContext.RouteData.GetValueSafe("Controller"); var defaultAction = this.HttpRequestContext.RouteData.GetValueSafe("Action"); var className = context.Items[Constants.DynamicRouting.ContextItemClassName]?.ToString(); var controllerMethod = PageTypeRoutingHelper.GetTargetControllerMethod(className); var controllerName = controllerMethod?.ReflectedType?.Name; var controllerAction = controllerMethod?.Name; if (string.IsNullOrWhiteSpace(controllerName) || string.IsNullOrWhiteSpace(controllerAction)) { controllerName = defaultController; controllerAction = defaultAction; } controllerName = controllerName.Replace("Controller", string.Empty); this.HttpRequestContext.RouteData.Values["Controller"] = controllerName; this.HttpRequestContext.RouteData.Values["Action"] = controllerAction; this.HttpRequestContext.HttpContext = new HttpContextWrapper(context); var controller = factory.CreateController(this.HttpRequestContext, controllerName); controller.Execute(this.HttpRequestContext); factory.ReleaseController(controller); }
public static void RegisterDynamicRoutes(RouteCollection routes) { PageTypeRoutingHelper.Initialize(); // If the Page is found by URL, will handle the routing dynamically var route = routes.MapRoute( name: "CheckByUrl", url: $"{{*{Constants.DynamicRouting.RoutingUrlParameter}}}", // Defaults are if it can't find a controller based on the pages defaults: new { defaultcontroller = "HttpErrors", defaultaction = "Index" }, constraints: new { PageFound = new PageFoundConstraint() } ); route.RouteHandler = new DynamicRouteHandler(); // Default route routes.MapRoute( name: "Default", url: "{controller}/{action}", defaults: new { controller = "HttpErrors", action = "Index" } ); }