带有 React 的 ASP.NET Core 3.1 - 服务器端渲染/预渲染 - 需要两个 Web 服务?

ale*_*zyk 20 asp.net asp.net-core

在 ASP.NET Core 2.2 中,拥有一个带有 React 前端和工作服务器端渲染的 ASP.NET Core 网站是相当简单的 - 因为 ASP.NET Core+React 模板中支持开箱即用的 SSR ,它在内部运行NodeServices以使用 node.js 执行 javascript。

然而,对于 ASP.NET Core 3.1,事情不再那么容易了,主要是因为SpaServicesNodeServices类被声明为过时并且将根据此链接被 .NET 5 删除。因此不再使用来自 C# 的节点执行 javascript。

现在,除了信息之外,ASP.NET Core 2.2 中建议的服务器端渲染现已过时,我发现如何继续的唯一建议来自上面的文章:

要启用服务器端预渲染和热模块重新加载等功能,请参阅相应 SPA 框架的文档。

但是,如果我理解正确,要进行基于反应的服务器端渲染,我需要有一个 node.js 服务器,它将在服务器端执行渲染。

这是否意味着,如果我想要一个带有 React 前端和 SSR 的 ASP.NET Core 3.1 网站——我应该有一个用于 WebAPI 的 ASP.NET Core 项目,以及另一个单独的 Node.JS 项目用于前端——以SSR结束?

然后将它们部署在两个单独的 Azure AppServices 上?

这是 ASP.NET Core + React 项目的推荐架构吗?

ale*_*zyk 8

在花了一些时间研究之后,这是当前的选择:

  • NodeServices使用带有obsolete标志的.NET Core 3.1
  • 为后端 (asp.net) 和前端 (node.js) 创建单独的项目
  • NodeServices自己分叉/复制和维护
  • 希望NodeServices在 .NET 5 发布之前的几个月内会有一个社区驱动的分支,如果它最终将被删除


小智 7

我遇到了完全相同的问题。我花了几周时间来创建一个新的设置,其中前端与后端是分开的。

在 GitHub 上发布了准备好的样板,并写了一篇博客文章,详细解释了如何使用 ASP.NET Core 和 React启用服务器端渲染。该解决方案是 CRA(创建 React 应用程序)、CRA Storybook 和标准 ASP.NET Core MVC 模板的组合。

长话短说,我构建了我的自定义 asp-prerender-module 和 asp-prerender-data 属性。它们与基于 Node.js 的 Express 服务器通信以获取呈现的 HTML。此后,提供给浏览器的 HTML 会因动作而“水合”。

  • 在我看来,这是一个混乱的解决方案,这可能就是 aspnet 核心团队也放弃这个的原因。分离项目虽然很麻烦,但更干净。不过弄清楚了就做得很好! (2认同)