public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { var virtualPath = base.GetVirtualPath(requestContext, values); if (requestContext.HttpContext is ModuleHttpContext) { var moduleUrl = virtualPath.VirtualPath; ModuleHttpContext httpContext = (ModuleHttpContext)(requestContext.HttpContext); var moduleContext = httpContext.ModuleContext; if (Page_Context.Current.Initialized) { var modulePositionId = Page_Context.Current.PageRequestContext.ModuleUrlContext.GetModulePositionIdForUrl(moduleContext.ModulePosition.ModuleName, moduleContext.ModulePosition.PagePositionId, values); var encodedModuleUrl = ModuleUrlHelper.Encode(moduleUrl); var routeValues = Page_Context.Current.PageRequestContext.ModuleUrlContext.GetRouteValuesWithModuleUrl(modulePositionId, encodedModuleUrl, moduleContext.ModulePosition.Exclusive); virtualPath.VirtualPath = Page_Context.Current.FrontUrl.PageUrl(Page_Context.Current.PageRequestContext.Page.FullName, routeValues).ToString().TrimStart('/'); } else { ModuleRequestContext moduleRequestContext = (ModuleRequestContext)requestContext; UrlHelper pageUrl = new UrlHelper(moduleRequestContext.PageControllerContext.RequestContext); virtualPath.VirtualPath = pageUrl.Action(moduleRequestContext.PageControllerContext.RequestContext.RouteData.Values["action"].ToString() , moduleRequestContext.PageControllerContext.RequestContext.AllRouteValues().Merge("ModuleUrl", moduleUrl)).TrimStart('/'); } } return(virtualPath); }
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { var virtualPath = base.GetVirtualPath(requestContext, values); if (requestContext.HttpContext is ModuleHttpContext && virtualPath != null) { var moduleUrl = virtualPath.VirtualPath; ModuleHttpContext httpContext = (ModuleHttpContext)(requestContext.HttpContext); var moduleContext = httpContext.ModuleContext; var mergedValues = Kooboo.Web.Mvc.RouteValuesHelpers.MergeRouteValues(null, null, this.Defaults, values, true); if (Page_Context.Current.Initialized) { Page page = null; var modulePositionId = Page_Context.Current.PageRequestContext.ModuleUrlContext.GetModulePositionIdForUrl(moduleContext.ModulePosition, mergedValues, out page); var encodedModuleUrl = ModuleUrlHelper.Encode(moduleUrl); var routeValues = Page_Context.Current.PageRequestContext.ModuleUrlContext.GetRouteValuesWithModuleUrl(modulePositionId, encodedModuleUrl, moduleContext.ModulePosition.Exclusive); var pageUrl = Page_Context.Current.FrontUrl.PageUrl(page.FullName, routeValues).ToString(); var routeVirtualPath = pageUrl; if (Uri.IsWellFormedUriString(pageUrl, UriKind.Absolute)) { routeVirtualPath = new Uri(routeVirtualPath).PathAndQuery; } virtualPath.VirtualPath = routeVirtualPath.TrimStart('/'); } else { ModuleRequestContext moduleRequestContext = (ModuleRequestContext)requestContext; UrlHelper pageUrl = new UrlHelper(moduleRequestContext.PageControllerContext.RequestContext); virtualPath.VirtualPath = pageUrl.Action(moduleRequestContext.PageControllerContext.RequestContext.RouteData.Values["action"].ToString() , moduleRequestContext.PageControllerContext.RequestContext.AllRouteValues().Merge("ModuleUrl", moduleUrl)).TrimStart('/'); } } return(virtualPath); }
public static ModuleActionInvokedContext InvokeAction(ControllerContext controllerContext, Site site, string moduleUrl, ModulePosition modulePosition) { HttpContext context = HttpContext.Current; var moduleSettings = ModuleInfo.GetSiteModuleSettings(modulePosition.ModuleName, site == null ? "" : site.FullName); if (modulePosition.Entry != null) { moduleSettings.Entry = modulePosition.Entry; } var settings = moduleSettings; var positionId = modulePosition.PagePositionId; var moduleName = modulePosition.ModuleName; ModuleContext moduleContext = ModuleContext.Create(site, moduleName, settings, modulePosition); if (string.IsNullOrEmpty(moduleUrl)) { if (settings != null && settings.Entry != null) { moduleUrl = GetEntryUrl(context, moduleContext, settings.Entry); if (!string.IsNullOrEmpty(moduleUrl) && !moduleUrl.StartsWith("~")) { moduleUrl = "~" + moduleUrl; } } } if (string.IsNullOrEmpty(moduleUrl)) { moduleUrl = "~/"; } else if (moduleUrl[0] != '~') { moduleUrl = "~/" + moduleUrl.TrimStart('/'); } var httpContext = new ModuleHttpContext(context , new ModuleHttpRequest(context.Request, moduleUrl, moduleContext, controllerContext), new ModuleHttpResponse(context.Response, moduleContext), moduleContext); var routeData = moduleContext.RouteTable.GetRouteData(httpContext); var requestContext = new ModuleRequestContext(httpContext, routeData, moduleContext) { PageControllerContext = controllerContext }; string controllerName = requestContext.RouteData.GetRequiredString("controller"); string actionName = requestContext.RouteData.GetRequiredString("action"); var controller = (Controller)ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, controllerName); if (controller == null) { throw new Exception(string.Format("The module '{0}' controller for path '{1}' does not found or does not implement IController.", moduleName, moduleUrl)); } //if (!(controller is ModuleControllerBase)) //{ // throw new Exception(string.Format("The controller type '{0}' must be inherited from ModuleControllerBase.", controller.GetType().FullName)); //} //ModuleControllerBase moduleController = (ModuleControllerBase)controller; //ControllerContext moduleControllerContext = new ControllerContext(requestContext, moduleController); InitializeController(controller, requestContext); var result = actionInvoker.InvokeActionWithoutExecuteResult(controller.ControllerContext, actionName); if (result == null) { HandleUnknownAction(controller, actionName); } return result; }
public static ModuleActionInvokedContext InvokeAction(ControllerContext controllerContext, Site site, string moduleUrl, ModulePosition modulePosition) { HttpContext context = HttpContext.Current; var moduleSettings = ModuleInfo.GetSiteModuleSettings(modulePosition.ModuleName, site == null ? "" : site.FullName); if (modulePosition.Entry != null) { moduleSettings.Entry = modulePosition.Entry; } var settings = moduleSettings; var positionId = modulePosition.PagePositionId; var moduleName = modulePosition.ModuleName; ModuleContext moduleContext = ModuleContext.Create(site, moduleName, settings, modulePosition); if (string.IsNullOrEmpty(moduleUrl)) { if (settings != null && settings.Entry != null) { moduleUrl = GetEntryUrl(context, moduleContext, settings.Entry); if (!string.IsNullOrEmpty(moduleUrl) && !moduleUrl.StartsWith("~")) { moduleUrl = "~" + moduleUrl; } } } if (string.IsNullOrEmpty(moduleUrl)) { moduleUrl = "~/"; } else if (moduleUrl[0] != '~') { moduleUrl = "~/" + moduleUrl.TrimStart('/'); } var httpContext = new ModuleHttpContext(context , new ModuleHttpRequest(context.Request, moduleUrl, moduleContext, controllerContext), new ModuleHttpResponse(context.Response, moduleContext), moduleContext); var routeData = moduleContext.RouteTable.GetRouteData(httpContext); var requestContext = new ModuleRequestContext(httpContext, routeData, moduleContext) { PageControllerContext = controllerContext }; string controllerName = requestContext.RouteData.GetRequiredString("controller"); string actionName = requestContext.RouteData.GetRequiredString("action"); var controller = (Controller)ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, controllerName); if (controller == null) { throw new Exception(string.Format("The module '{0}' controller for path '{1}' does not found or does not implement IController.", moduleName, moduleUrl)); } //if (!(controller is ModuleControllerBase)) //{ // throw new Exception(string.Format("The controller type '{0}' must be inherited from ModuleControllerBase.", controller.GetType().FullName)); //} //ModuleControllerBase moduleController = (ModuleControllerBase)controller; //ControllerContext moduleControllerContext = new ControllerContext(requestContext, moduleController); InitializeController(controller, requestContext); var result = actionInvoker.InvokeActionWithoutExecuteResult(controller.ControllerContext, actionName); if (result == null) { HandleUnknownAction(controller, actionName); } return(result); }