public static async Task <SsrResult> RenderAsync(HttpRequest request, string jsBundlePath, string appBaseUrl, SsrData data) { // Based on https://github.com/MarkPieszak/aspnetcore-angular2-universal/blob/04273f64e122fa5648f4d21fab76da30163eedfd/Server/Controllers/HomeController.cs var nodeServices = request.HttpContext.RequestServices.GetRequiredService <INodeServices>(); var hostEnv = request.HttpContext.RequestServices.GetRequiredService <IHostingEnvironment>(); var logger = request.HttpContext.RequestServices.GetRequiredService <ILogger <SsrRenderer> >(); var applicationBasePath = hostEnv.WebRootPath; var requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); var unencodedPathAndQuery = requestFeature.RawTarget; var unencodedAbsoluteUrl = $"{request.Scheme}://{request.Host}{unencodedPathAndQuery}"; var appPath = $"{request.PathBase}{appBaseUrl}"; var appRelativeUrl = unencodedPathAndQuery.StartsWith(appPath) ? unencodedPathAndQuery.Substring(appPath.Length) : unencodedPathAndQuery; logger.LogDebug($"[SSR] request.PathBase: {request.PathBase}; requestFeature.RawTarget: {requestFeature.RawTarget}, unencodedAbsoluteUrl: {unencodedAbsoluteUrl}, appBaseUrl: {appBaseUrl}, appPath: {appPath}, appRelativeUrl: {appRelativeUrl}"); try { var prerenderResult = await Prerenderer.RenderToString( "/", nodeServices, new JavaScriptModuleExport(hostEnv.WebRootPath + "/" + jsBundlePath), unencodedAbsoluteUrl, appRelativeUrl, data, PrerenderTimeoutMilliseconds, appBaseUrl ); var result = new SsrResult( prerenderResult.Html, // our <app> from Angular prerenderResult.Globals["title"].ToString(), prerenderResult.Globals["styles"].ToString(), prerenderResult.Globals["meta"].ToString(), prerenderResult.Globals["links"].ToString() ); return(result); } catch (Exception ex) { logger.LogError(new EventId(0, name: "ssr"), ex, "Server-side rendering failed."); return(null); } }
public static async Task <SsrResult> RenderAsync(HttpRequest request, SsrOptions options) { var nodeServices = request.HttpContext.RequestServices.GetRequiredService <INodeServices>(); var hostEnv = request.HttpContext.RequestServices.GetRequiredService <IHostingEnvironment>(); var logger = request.HttpContext.RequestServices.GetRequiredService <ILogger <SsrHelper> >(); var applicationBasePath = hostEnv.WebRootPath; var requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); var unencodedPathAndQuery = requestFeature.RawTarget; var unencodedAbsoluteUrl = $"{request.Scheme}://{request.Host}{unencodedPathAndQuery}"; try { var prerenderResult = await Prerenderer.RenderToString( "/", nodeServices, new JavaScriptModuleExport(hostEnv.WebRootPath + "/" + options.JsBundlePath), unencodedAbsoluteUrl, unencodedPathAndQuery, null, 30000, request.PathBase.ToString() ); var result = new SsrResult( prerenderResult.Html, // our <app> from Angular prerenderResult.Globals["title"].ToString(), prerenderResult.Globals["styles"].ToString(), prerenderResult.Globals["meta"].ToString(), prerenderResult.Globals["links"].ToString() ); return(result); } catch (Exception ex) { logger.LogError(new EventId(0, name: "ssr"), ex, "Server-side rendering failed."); return(null); } }