Exemplo n.º 1
0
        public async Task <IActionResult> Index()
        {
            // for production, enable server side renderring
            var applicationBasePath   = _hostingEnvironment.ContentRootPath;
            var requestFeature        = Request.HttpContext.Features.Get <IHttpRequestFeature>();
            var unencodedPathAndQuery = requestFeature.RawTarget;
            var unencodedAbsoluteUrl  = $"{Request.Scheme}://{Request.Host}{unencodedPathAndQuery}";

            // ** TransferData concept **
            // Here we can pass any Custom Data we want !

            TransferData transferData = new TransferData
            {
                request            = AbstractHttpContextRequestInfo(Request),
                thisCameFromDotNET = new
                {
                    heroCompanies = _heroAppService.GetHeroCompanies(),
                    heroes        = _heroAppService.GetHeroes(null)
                }
            };

            var nodeService = Request.HttpContext.RequestServices.GetRequiredService <INodeServices>(); // nodeServices

            //Prerender now needs CancellationToken
            System.Threading.CancellationTokenSource cancelSource = new System.Threading.CancellationTokenSource();
            System.Threading.CancellationToken       cancelToken  = cancelSource.Token;

            // Prerender / Serialize application (with Universal)
            var prerenderResult = await Prerenderer.RenderToString(
                "/",
                nodeService,
                //Request.HttpContext.RequestServices.GetRequiredService<INodeServices>(), // nodeServices
                cancelToken,
                new JavaScriptModuleExport(applicationBasePath + "/HeroApp/dist-server/main.bundle"),
                unencodedAbsoluteUrl,
                unencodedPathAndQuery,
                transferData, // Our simplified Request object & any other CustommData you want to send!
                30000,
                Request.PathBase.ToString()
                );

            ViewData["SpaHtml"]      = prerenderResult.Html;                    // our <app> from Angular
            ViewData["Title"]        = prerenderResult.Globals["title"];        // set our <title> from Angular
            ViewData["Styles"]       = prerenderResult.Globals["styles"];       // put styles in the correct place
            ViewData["Meta"]         = prerenderResult.Globals["meta"];         // set our <meta> SEO tags
            ViewData["Links"]        = prerenderResult.Globals["links"];        // set our <link rel="canonical"> etc SEO tags
            ViewData["TransferData"] = prerenderResult.Globals["transferData"]; // our transfer data set to window.TRANSFER_CACHE = {};

            return(View());
        }