c#关闭html页面,c# - 如何从.net核心后端获取角度7的预渲染html页面? [关闭] - 堆栈内存溢出...

是的,您可以在.Net Core和Angular 7中使用预渲染。

它的实现包含许多细节。 寻找.Net Core Side的BuildPrerenderer扩展方法和HomeController

public async Task Index () {

var prerenderResult = await this.Request.BuildPrerender ();

this.ViewData["SpaHtml"] = prerenderResult.Html; // our from Angular

this.ViewData["Title"] = prerenderResult.Globals["title"]; // set our

from Angular

this.ViewData["Styles"] = prerenderResult.Globals["styles"]; // put styles in the correct place

this.ViewData["Scripts"] = prerenderResult.Globals["scripts"]; // scripts (that were in our header)

this.ViewData["Meta"] = prerenderResult.Globals["meta"]; // set our SEO tags

this.ViewData["Links"] = prerenderResult.Globals["links"]; // set our etc SEO tags

this.ViewData["TransferData"] = prerenderResult.Globals["transferData"]; // our transfer data set to window.TRANSFER_CACHE = {}

...

return View();

}

BuildPrerender

public static async Task BuildPrerender(this HttpRequest request) =>

// Prerender / Serialize application (with Universal)

await Prerenderer.RenderToString(

"/",

request.HttpContext.RequestServices.GetRequiredService(),

new System.Threading.CancellationTokenSource().Token,

new JavaScriptModuleExport(request.HttpContext.RequestServices.GetRequiredService().ContentRootPath + "/ClientApp/dist/main-server"),

$"{request.Scheme}://{request.Host}{request.HttpContext.Features.Get().RawTarget}",

request.HttpContext.Features.Get().RawTarget,

// ** TransferData concept **

// Here we can pass any Custom Data we want !

// By default we're passing down Cookies, Headers, Host from the Request object here

new TransferData

{

request = request.AbstractRequestInfo(),

thisCameFromDotNET = "Hi Angular it's asp.net :)"

}, // Our simplified Request object & any other CustommData you want to send!

30000,

request.PathBase.ToString()

);

在索引View.cs中,您需要

@Html.Raw(ViewData["SpaHtml"])

在Angular Side(boot.server.ts)中

import { createServerRenderer } from 'aspnet-prerendering';

export default createServerRenderer((params) => {

// Platform-server provider configuration

const setupOptions: IEngineOptions = {

appSelector: '',

ngModule: AppModule,

request: params,

providers: [

// Optional - Any other Server providers you want to pass

// (remember you'll have to provide them for the Browser as well)

]

};

return ngAspnetCoreEngine(setupOptions).then(response => {

// Apply your transferData to response.globals

response.globals.transferData = createTransferScript({

someData: 'Transfer this to the client on the window.TRANSFER_CACHE {} object',

fromDotnet: params.data.thisCameFromDotNET // example of data coming from dotnet, in HomeController

});

return ({

html: response.html, // our serialized

globals: response.globals // all of our styles/scripts/meta-tags/link-tags for aspnet to serve up

});

});

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值