11using Asp2017 . Server . Models ;
2+ using Microsoft . AspNetCore . Hosting ;
23using Microsoft . AspNetCore . Http ;
4+ using Microsoft . AspNetCore . Http . Features ;
5+ using Microsoft . AspNetCore . NodeServices ;
6+ using Microsoft . AspNetCore . SpaServices . Prerendering ;
7+ using Microsoft . Extensions . DependencyInjection ;
38using System ;
49using System . Collections . Generic ;
510using System . Linq ;
@@ -19,5 +24,42 @@ public static IRequest AbstractRequestInfo(this HttpRequest request)
1924
2025 return requestSimplified ;
2126 }
27+
28+ public static async Task < RenderToStringResult > BuildPrerender ( this HttpRequest Request )
29+ {
30+ var nodeServices = Request . HttpContext . RequestServices . GetRequiredService < INodeServices > ( ) ;
31+ var hostEnv = Request . HttpContext . RequestServices . GetRequiredService < IHostingEnvironment > ( ) ;
32+
33+ var applicationBasePath = hostEnv . ContentRootPath ;
34+ var requestFeature = Request . HttpContext . Features . Get < IHttpRequestFeature > ( ) ;
35+ var unencodedPathAndQuery = requestFeature . RawTarget ;
36+ var unencodedAbsoluteUrl = $ "{ Request . Scheme } ://{ Request . Host } { unencodedPathAndQuery } ";
37+
38+ // ** TransferData concept **
39+ // Here we can pass any Custom Data we want !
40+
41+ // By default we're passing down Cookies, Headers, Host from the Request object here
42+ TransferData transferData = new TransferData ( ) ;
43+ transferData . request = Request . AbstractRequestInfo ( ) ;
44+ transferData . thisCameFromDotNET = "Hi Angular it's asp.net :)" ;
45+ // Add more customData here, add it to the TransferData class
46+
47+ //Prerender now needs CancellationToken
48+ System . Threading . CancellationTokenSource cancelSource = new System . Threading . CancellationTokenSource ( ) ;
49+ System . Threading . CancellationToken cancelToken = cancelSource . Token ;
50+
51+ // Prerender / Serialize application (with Universal)
52+ return await Prerenderer . RenderToString (
53+ "/" ,
54+ nodeServices ,
55+ cancelToken ,
56+ new JavaScriptModuleExport ( applicationBasePath + "/ClientApp/dist/main-server" ) ,
57+ unencodedAbsoluteUrl ,
58+ unencodedPathAndQuery ,
59+ transferData , // Our simplified Request object & any other CustommData you want to send!
60+ 30000 ,
61+ Request . PathBase . ToString ( )
62+ ) ;
63+ }
2264 }
2365}
0 commit comments