private void ExecuteTemplateRendering(TextWriter sw, PublishedRequest request) { //NOTE: Before we used to build up the query strings here but this is not necessary because when we do a // Server.Execute in the TemplateRenderer, we pass in a 'true' to 'preserveForm' which automatically preserves all current // query strings so there's no need for this. HOWEVER, once we get MVC involved, we might have to do some fun things, // though this will happen in the TemplateRenderer. //var queryString = _umbracoContext.HttpContext.Request.QueryString.AllKeys // .ToDictionary(key => key, key => context.Request.QueryString[key]); var requestContext = new RequestContext(_umbracoContextAccessor.UmbracoContext.HttpContext, new RouteData() { Route = RouteTable.Routes["Umbraco_default"] }); var routeHandler = new RenderRouteHandler(_umbracoContextAccessor, ControllerBuilder.Current.GetControllerFactory()); var routeDef = routeHandler.GetUmbracoRouteDefinition(requestContext, request); var renderModel = new ContentModel(request.PublishedContent); //manually add the action/controller, this is required by mvc requestContext.RouteData.Values.Add("action", routeDef.ActionName); requestContext.RouteData.Values.Add("controller", routeDef.ControllerName); //add the rest of the required route data routeHandler.SetupRouteDataForRequest(renderModel, requestContext, request); var stringOutput = RenderUmbracoRequestToString(requestContext); sw.Write(stringOutput); }
private void ExecuteTemplateRendering(TextWriter sw, PublishedContentRequest contentRequest) { //NOTE: Before we used to build up the query strings here but this is not necessary because when we do a // Server.Execute in the TemplateRenderer, we pass in a 'true' to 'preserveForm' which automatically preserves all current // query strings so there's no need for this. HOWEVER, once we get MVC involved, we might have to do some fun things, // though this will happen in the TemplateRenderer. //var queryString = _umbracoContext.HttpContext.Request.QueryString.AllKeys // .ToDictionary(key => key, key => context.Request.QueryString[key]); switch (contentRequest.RenderingEngine) { case RenderingEngine.Mvc: var requestContext = new RequestContext(_umbracoContext.HttpContext, new RouteData() { Route = RouteTable.Routes["Umbraco_default"] }); var routeHandler = new RenderRouteHandler(ControllerBuilder.Current.GetControllerFactory(), _umbracoContext); var routeDef = routeHandler.GetUmbracoRouteDefinition(requestContext, contentRequest); var renderModel = new RenderModel(contentRequest.PublishedContent, contentRequest.Culture); //manually add the action/controller, this is required by mvc requestContext.RouteData.Values.Add("action", routeDef.ActionName); requestContext.RouteData.Values.Add("controller", routeDef.ControllerName); //add the rest of the required route data routeHandler.SetupRouteDataForRequest(renderModel, requestContext, contentRequest); //create and assign the controller context routeDef.Controller.ControllerContext = new ControllerContext(requestContext, routeDef.Controller); //render as string var stringOutput = routeDef.Controller.RenderViewToString( routeDef.ActionName, renderModel); sw.Write(stringOutput); break; case RenderingEngine.WebForms: default: var webFormshandler = (global::umbraco.UmbracoDefault)BuildManager .CreateInstanceFromVirtualPath("~/default.aspx", typeof(global::umbraco.UmbracoDefault)); //the 'true' parameter will ensure that the current query strings are carried through, we don't have // to build up the url again, it will just work. _umbracoContext.HttpContext.Server.Execute(webFormshandler, sw, true); break; } }