Skip to content

Commit e2d0e6e

Browse files
committed
make prerender an extension
1 parent 63792d1 commit e2d0e6e

File tree

3 files changed

+43
-55
lines changed

3 files changed

+43
-55
lines changed

Server/Controllers/HomeController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class HomeController : Controller
1919
[HttpGet]
2020
public async Task<IActionResult> Index()
2121
{
22-
var prerenderResult = await Prerender.BuildPrerender(Request);
22+
var prerenderResult = await Request.BuildPrerender();
2323

2424
ViewData["SpaHtml"] = prerenderResult.Html; // our <app> from Angular
2525
ViewData["Title"] = prerenderResult.Globals["title"]; // set our <title> from Angular

Server/Helpers/HttpRequestExtensions.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
using Asp2017.Server.Models;
2+
using Microsoft.AspNetCore.Hosting;
23
using 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;
38
using System;
49
using System.Collections.Generic;
510
using 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
}

Server/Helpers/Prerender.cs

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)