如果我想要一个单独的 Web api,但仍然 运行 服务器端然后再到客户端,应该选择哪个项目模板?

Which project template to choose if I want a seperate web api, yet still run server-side and later to client-side?

当使用 Blazor 创建 ASP.NET 核心项目时,这会提出一些有趣的架构决策。有 3 个不同的项目模板。
- Blazor
- Blazor(ASP.NET 核心托管)
- Blazor(ASP.NET 核心中的服务器端)

问题 1
我试图了解 "Blazor (Server-side in ASP.NET Core) " 模板或构建项目的方法的目的或好处。为什么要让一个 .NET 核心应用程序为另一个 .NET 核心应用程序提供服务?或者我错过了什么? 考虑到此处解释的不同托管模型。
https://blazor.net/docs/host-and-deploy/hosting-models.html
这不能只是一个使用服务器端 Blazor 而不是 2 的项目吗?

问题 2
如果我正在查看如下图所示的架构,我不应该从 "ASP.NET Core Hosted" 模板开始,然后更改 .Client 项目以使用 "server-side" 框架吗?这样,我仍然有一个可调用的 api 可以在需要时从另一个应用程序访问它?或者我想我仍然可以使用 "Server-side" 模板,它会预先设置所有启动管道以使用服务器端托管模型启动客户端,并将其与添加我自己的 API 控制器相结合到 .Server 项目,它将根据图表通过业务规则库调用。

问题3
在某些时候,当 tooling/debugging 支持变得更好时,我可能想将 .Client 应用程序切换为使用 webassembly。我不认为我建议的架构禁止这样做?我只想更改 .Server 应用程序中的启动代码,将对 blazor.server.js 的引用替换为 blazor.webassembly.js 和其他一些东西,我应该很高兴。我在这里偏离基地了吗?

架构说明:
- 客户端应用程序需要通过一些 CRUD 操作访问资源,因此它调用业务规则 class 库
中的方法 - 业务规则库引用了一个 class 库,其中包含 "dumb" POCO class 代表各种领域模型的 es。调用 api
- API controller/action 然后调用管理 Entity Framework DbContext 的数据库或存储库,用于 fetching/updating Db
中的数据 - 业务规则库、数据库和 API 都引用 "Models" 库。

问题 1: 服务器端渲染有很多好处,包括:

  1. 由于 UI 更新是通过 SignalR 连接处理的,我们可以 避免不必要的页面刷新。
  2. 应用下载大小更小,初始应用加载速度更快。 Blazor 组件可以充分利用服务器的能力 例如使用 .NET Core 兼容的 API。
  3. 它还将支持现有的 .NET 工具,例如调试 应用程序和 JIT 编译。
  4. 由于服务器端 Blazor 在本机 .NET Core 进程下运行,并且 不在 Mono WebAssembly 下,浏览器也支持它 没有 WebAssembly 支持。

是的,您可以让一个服务器端应用程序无需 api 即可访问数据库。除非您重构,否则这反过来会将您的应用程序限制为服务器端呈现。

问题 2: 是的,我相信只要编写支持客户端功能的代码就可以了。例如从应用程序到 api.

的 Http 请求

问题 3: 是的,您是正确的,只需对代码进行一些小改动,您就可以同时支持服务器端和客户端。我要问的一件事是您如何在客户端编写代码,即如果您要使用标准 .net 库,客户端可能无法完全支持它们。此外,如果您首先制作服务器端应用程序并制作服务来调用以获取数据,例如访问数据库上下文,当切换到 Web 客户端配置时,您很可能需要发出 http Web 请求。

有关体验切换的其他信息可在此处找到:Link

也许这个Blazor Template可以帮助你实现你想要的

I want a seperate web api, yet still run server-side and later to client-side?

Blazor 模板(作者在此)

是用于创建 Blazor 的 Visual Studio 2019 Preview 3 项目模板 可以在客户端或服务器端托管的 v0.8.0 解决方案, 这背后的想法是有一个方便的实现,允许 轻松更改托管模型。

所以基本上在同一个解决方案中,您将拥有:

  • web-api(ASP.Net 核心托管)
  • 服务器端(带 SignalR 和调试的 Razor 组件)
  • 客户端(SPA + webassembly)

这样在开发期间您可以 select 和 运行 服务器端项目以获得完整的 C# 调试功能,稍后,select 客户端项目并将其发布为独立 SPA 运行在 webassebly 上发布,无需触及一行代码。

更重要的是,运行在服务器端模式下,不仅可以使用带有 SignalR 和调试的 Razor 组件,还可以使用 Web API 控制器,因此您可以模拟实际行为该应用程序将投入生产。

希望对您有所帮助