Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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" }
                );
        }