Skip to content

Commit 63792d1

Browse files
committed
refactor HomeController
1 parent 9562cf9 commit 63792d1

File tree

5 files changed

+109
-59
lines changed

5 files changed

+109
-59
lines changed
Lines changed: 3 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Asp2017.Server.Helpers;
12
using System.Threading.Tasks;
23
using Microsoft.AspNetCore.Mvc;
34

@@ -9,6 +10,7 @@
910
using Microsoft.AspNetCore.Http;
1011
using System.Diagnostics;
1112
using System;
13+
using Asp2017.Server.Models;
1214

1315
namespace AspCoreServer.Controllers
1416
{
@@ -17,39 +19,7 @@ public class HomeController : Controller
1719
[HttpGet]
1820
public async Task<IActionResult> Index()
1921
{
20-
var nodeServices = Request.HttpContext.RequestServices.GetRequiredService<INodeServices>();
21-
var hostEnv = Request.HttpContext.RequestServices.GetRequiredService<IHostingEnvironment>();
22-
23-
var applicationBasePath = hostEnv.ContentRootPath;
24-
var requestFeature = Request.HttpContext.Features.Get<IHttpRequestFeature>();
25-
var unencodedPathAndQuery = requestFeature.RawTarget;
26-
var unencodedAbsoluteUrl = $"{Request.Scheme}://{Request.Host}{unencodedPathAndQuery}";
27-
28-
// ** TransferData concept **
29-
// Here we can pass any Custom Data we want !
30-
31-
// By default we're passing down Cookies, Headers, Host from the Request object here
32-
TransferData transferData = new TransferData();
33-
transferData.request = AbstractHttpContextRequestInfo(Request);
34-
transferData.thisCameFromDotNET = "Hi Angular it's asp.net :)";
35-
// Add more customData here, add it to the TransferData class
36-
37-
//Prerender now needs CancellationToken
38-
System.Threading.CancellationTokenSource cancelSource = new System.Threading.CancellationTokenSource();
39-
System.Threading.CancellationToken cancelToken = cancelSource.Token;
40-
41-
// Prerender / Serialize application (with Universal)
42-
var prerenderResult = await Prerenderer.RenderToString(
43-
"/",
44-
nodeServices,
45-
cancelToken,
46-
new JavaScriptModuleExport(applicationBasePath + "/ClientApp/dist/main-server"),
47-
unencodedAbsoluteUrl,
48-
unencodedPathAndQuery,
49-
transferData, // Our simplified Request object & any other CustommData you want to send!
50-
30000,
51-
Request.PathBase.ToString()
52-
);
22+
var prerenderResult = await Prerender.BuildPrerender(Request);
5323

5424
ViewData["SpaHtml"] = prerenderResult.Html; // our <app> from Angular
5525
ViewData["Title"] = prerenderResult.Globals["title"]; // set our <title> from Angular
@@ -87,31 +57,5 @@ public IActionResult Error()
8757
{
8858
return View();
8959
}
90-
91-
private IRequest AbstractHttpContextRequestInfo(HttpRequest request)
92-
{
93-
94-
IRequest requestSimplified = new IRequest();
95-
requestSimplified.cookies = request.Cookies;
96-
requestSimplified.headers = request.Headers;
97-
requestSimplified.host = request.Host;
98-
99-
return requestSimplified;
100-
}
101-
}
102-
103-
public class IRequest
104-
{
105-
public object cookies { get; set; }
106-
public object headers { get; set; }
107-
public object host { get; set; }
108-
}
109-
110-
public class TransferData
111-
{
112-
public dynamic request { get; set; }
113-
114-
// Your data here ?
115-
public object thisCameFromDotNET { get; set; }
11660
}
11761
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using Asp2017.Server.Models;
2+
using Microsoft.AspNetCore.Http;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Threading.Tasks;
7+
8+
namespace Asp2017.Server.Helpers
9+
{
10+
public static class HttpRequestExtensions
11+
{
12+
public static IRequest AbstractRequestInfo(this HttpRequest request)
13+
{
14+
15+
IRequest requestSimplified = new IRequest();
16+
requestSimplified.cookies = request.Cookies;
17+
requestSimplified.headers = request.Headers;
18+
requestSimplified.host = request.Host;
19+
20+
return requestSimplified;
21+
}
22+
}
23+
}

Server/Helpers/Prerender.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using Asp2017.Server.Models;
2+
using Microsoft.AspNetCore.Hosting;
3+
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;
8+
using System;
9+
using System.Collections.Generic;
10+
using System.Linq;
11+
using System.Threading.Tasks;
12+
13+
namespace Asp2017.Server.Helpers
14+
{
15+
public static class Prerender
16+
{
17+
public static async Task<RenderToStringResult> BuildPrerender(HttpRequest Request)
18+
{
19+
var nodeServices = Request.HttpContext.RequestServices.GetRequiredService<INodeServices>();
20+
var hostEnv = Request.HttpContext.RequestServices.GetRequiredService<IHostingEnvironment>();
21+
22+
var applicationBasePath = hostEnv.ContentRootPath;
23+
var requestFeature = Request.HttpContext.Features.Get<IHttpRequestFeature>();
24+
var unencodedPathAndQuery = requestFeature.RawTarget;
25+
var unencodedAbsoluteUrl = $"{Request.Scheme}://{Request.Host}{unencodedPathAndQuery}";
26+
27+
// ** TransferData concept **
28+
// Here we can pass any Custom Data we want !
29+
30+
// By default we're passing down Cookies, Headers, Host from the Request object here
31+
TransferData transferData = new TransferData();
32+
transferData.request = Request.AbstractRequestInfo();
33+
transferData.thisCameFromDotNET = "Hi Angular it's asp.net :)";
34+
// Add more customData here, add it to the TransferData class
35+
36+
//Prerender now needs CancellationToken
37+
System.Threading.CancellationTokenSource cancelSource = new System.Threading.CancellationTokenSource();
38+
System.Threading.CancellationToken cancelToken = cancelSource.Token;
39+
40+
// Prerender / Serialize application (with Universal)
41+
return await Prerenderer.RenderToString(
42+
"/",
43+
nodeServices,
44+
cancelToken,
45+
new JavaScriptModuleExport(applicationBasePath + "/ClientApp/dist/main-server"),
46+
unencodedAbsoluteUrl,
47+
unencodedPathAndQuery,
48+
transferData, // Our simplified Request object & any other CustommData you want to send!
49+
30000,
50+
Request.PathBase.ToString()
51+
);
52+
}
53+
}
54+
}

Server/Models/IRequest.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
6+
namespace Asp2017.Server.Models
7+
{
8+
public class IRequest
9+
{
10+
public object cookies { get; set; }
11+
public object headers { get; set; }
12+
public object host { get; set; }
13+
}
14+
}

Server/Models/TransferData.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
6+
namespace Asp2017.Server.Models
7+
{
8+
public class TransferData
9+
{
10+
public dynamic request { get; set; }
11+
12+
// Your data here ?
13+
public object thisCameFromDotNET { get; set; }
14+
}
15+
}

0 commit comments

Comments
 (0)