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);
        }
Beispiel #2
0
        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;
            }
        }