"ASP.NET Core hosted" 在 Blazor WASM 应用程序中的用途是什么?

What's the purpose of "ASP.NET Core hosted" in Blazor WASM app?

在 Visual Studio 2022 年创建新的 Blazor WebAssembly 应用程序时,有一个“ASP.NET 核心托管”选项(带有无用的工具提示)。

如果您勾选这个而不是解决方案中的 1 个 WASM 项目,则有 3 个,Client (WASM),Shared 和 Server。

Blazor Server 应用虽然是启动项目,但没有任何页面。当您 运行 它会调用 WASM Blazor 客户端应用程序。

我找不到这样做的目的的解释?如果我将 WASM 应用程序部署到 IIS 服务器,它 运行 没有服务器应用程序也可以。

注意,我不是在问 Blazor Server(服务器端代码 运行ning 在发送 HTML 到客户端的服务器上)和 Blazor Client WASM(C# 代码编译成运行 在浏览器中的 WebAssembly)。这个我知道。

我想问的是,如果您打算创建 WASM 应用程序,为什么要在包含 Blazor WASM 应用程序的解决方案中使用 Blazor Server 应用程序。

我找不到这个问题的直接答案。要么这篇文章没有回答 - 或者我遗漏了一些东西:

我找不到其他任何东西。

那么 Blazor Server 应用程序的用途是什么,为什么它先 运行ning 然后调用 WASM 应用程序。另外,您将如何主持?

谢谢。

更新

我知道 WASM 应用只是客户端,你需要,比如说,一个 Web API 项目来连接,以便从 Web 服务器提取数据。

这个“.net Core Hosted”模板是否正在做我自己无法通过使用 WASM 项目创建解决方案 - 然后添加 Web API 项目(和各种共享项目)来完成的事情?

Blazor 服务器应用几乎像分布式桌面应用一样工作。浏览器上的每个事件都发送到服务器,服务器处理事件,计算 DOM 中的结果变化并发送 diffed DOM 然后由浏览器端 js 和页面已更新。

使用传统网页API样式模式在这里是完全可选的。在 Blazor 服务器应用程序中,您无需编写单个 Web API 即可让应用程序运行。一切都可以写成单个桌面应用程序。

webassembly 应用更丰富。该应用程序实际上 运行 在浏览器上运行,所有内容(事件处理、UI 刷新等)仅在客户端完成。这些就是所谓的 'static apps/websites' ,一旦加载,就不需要执行任何其他操作。想象一个单人游戏,Flash 风格的游戏——它们不需要连接到 database/application 服务器。

然而,几乎没有任何丰富的应用程序甚至不需要基本的数据库连接。那么一个应用程序——比如一个维护排行榜的游戏应用程序——如何与远程维护应用程序数据的应用程序服务器和数据库进行通信? 这是托管模型派上用场的地方。在典型的 Web 应用程序场景中,您基本上需要三个组件 1) 客户端代码 - 应用程序 2) 服务器端代码 - Web API - 维护状态 3) 共享对象模型 - 以便前两个可以通信无缝地。 这就是您在“.net 核心托管”选项中看到的内容。该模板为所有三个组件创建样板。客户端和服务器都将使用的 类 放在共享项目中。服务器端和客户端逻辑存在于它们各自的项目中,并且它们都引用共享项目 而没有 相互引用。

运行 webassembly 应用必须要有这个吗?不可以。您可以在您选择的任何平台上编写服务器端逻辑 - 它不必是 asp.net - 并从 Blazor webassembly 应用程序调用 API 。但是,您仍将最终为客户端服务器通信创建映射器 类。 .net 核心托管选项提供了一种非常方便的方式来执行此操作。