。Net Core的UseSpaPrerendering中将控制器动作输出作为SupplyData传递

问题描述 投票:0回答:1

在.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)。

asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0 asp.net-core-2.1
1个回答
0
投票

我写了一个程序包,以确定来自supplydata委托的当前激活的SPA路由。

https://github.com/MusicDemons/AspNetSpaPrerendering

您必须使用SpaRouteBuilder定义所有SPA路线,然后您可以检查激活了哪个路线并获取路线数据(如ID)。基于此,您可以通过存储库从数据库中获取数据,并将此数据添加到阵列中。包括完整的示例。

© www.soinside.com 2019 - 2024. All rights reserved.