在.Net Core应用程序中,我在Startup.cs文件的Configure
方法中具有以下代码。
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
spa.UseSpaPrerendering(options =>
{
options.BootModulePath = $"{spa.Options.SourcePath}/dist-server/main.js";
options.BootModuleBuilder = env.IsDevelopment() ? new AngularCliBuilder(npmScript: "build:ssr") : null;
options.ExcludeUrls = new[] { "/sockjs-node" };
});
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
[UseSpaPrerendering
可以提供SupplyData
回调,使您可以传递任意的,按请求的,JSON可序列化的数据。
在我的情况下,我的Angular应用程序中有一些页面会发出http请求来获取数据。由于这些请求是针对同一应用程序发出的。我看到了优化的潜力,即是否可以仅调用相应的Controller Action方法并将其数据提供给Angular,这样就不必为SSR发出http请求。
任何人都可以指导如何实现此目标。
我知道以下是我们如何使用SupplyData传递数据的方法
options.SupplyData = (context, data) =>
{
// Creates a new value called isHttpsRequest that's passed to TypeScript code
data["isHttpsRequest"] = context.Request.IsHttps;
};
但是我们如何传递Controller Actions的结果/输出(返回json)。
我写了一个程序包,以确定来自supplydata委托的当前激活的SPA路由。
https://github.com/MusicDemons/AspNetSpaPrerendering
您必须使用SpaRouteBuilder定义所有SPA路线,然后您可以检查激活了哪个路线并获取路线数据(如ID)。基于此,您可以通过存储库从数据库中获取数据,并将此数据添加到阵列中。包括完整的示例。