使用 ASP.net 核心托管模型了解 Blazor 程序集

Understanding Blazor Assembly with ASP.net Core Hosted Model

我已经阅读了很多关于 Blazor 和不同托管模型的文章(实际上是 3 篇)。最容易理解的是纯客户端模型,它是运行在 webassembly 上的独立应用程序。没问题。但是我继续努力理解服务器模型和 WebAssembly 模型与 ASP.NET 核心托管(复选框)模型之间的区别。

请帮我澄清一些事情。

1) 对于服务器模型,浏览器使用 signalR 连接到服务器应用程序。这是 Visual Studio 中的一个应用程序。 ASP.NET Core Hosted 模型将单个应用程序拆分为两个独立的应用程序,Client 和 Server,这种理解是否正确。客户端是一个 WebAssembly 应用程序,它仍然使用 SignalR 与服务器应用程序通信以获取事件和获取数据?

2) 在客户端和服务器应用程序之间,除了服务器应用程序引用客户端应用程序之外,我没有看到它们有任何关系或 class 引用。我可以删除客户端应用程序引用,它仍然可以编译。但是,该站点是空的。那么服务器应用程序如何知道从客户端应用程序加载内容的位置呢?仅仅是因为客户端应用程序被引用了吗? "hook up" 在哪里?我问这个的另一个原因是我已经开始开发一个使用服务器模型的网站,但是现在如果我想更改为使用 ASP.NET Core Host 的客户端模型,我该怎么做?

3) 在服务器应用程序中,有 _Layout.cshtml 文件。在客户端应用程序中,wwwroot 下有 index.html。渲染的是 index.html。那么 _Layout.cshtml 有什么用呢?

4) 我从示例 VS 模板中看到,服务器应用程序用作 API 服务(天气预报)。在我的环境中,我已经有了可以使用的专用 API 服务。那么我使用服务器应用程序有什么用呢?它只是一个空的 .NET 核心应用程序来托管客户端应用程序吗?除了 API 个调用之外,您如何使用服务器应用程序?

Is it a correct understanding [...]. The Client is a WebAssembly app, and it still uses SignalR to communicate with the server app for events and fetching data?

没有。

Blazor 服务器:您的代码 运行 在服务器上,并且使用 SignalR 推送更改。
Blazor Webassembly:在浏览器中独立运行。
Blazor Webassembly Hosted:一个解决方案中有 3 个项目。这只是一个方便的模板。 Asp.NET 服务器部分(不是 Blazor 应用程序)为客户端提供服务,是托管 API 的地方。

Blazor Wasm 可以使用 SignalR 作为一项额外功能,但它不需要它来运行。

Between the Client and Server app, I do not see they have any relations or class references except the Server app references the Client app.

正确。服务器只需要该引用即可找到 Wasm 应用程序的(输出)文件。您可以删除引用并使用路径字符串配置某些内容。 2个项目之间没有'technical'link。他们 运行 在不同的平台上。

In the Server app, there is _Layout.cshtml file. ... So what is _Layout.cshtml for?

在你的项目中添加授权时使用。当您不使用授权时它就在那里的事实可能是一种疏忽。要查看实际效果,请创建一个启用了个人帐户的服务器或托管项目。登录等页面使用 _Layout.cshtml

I already have a dedicated API service that I can consume. So what do I use the Server app for?

那么你不需要它,你应该只使用简单的 WebAssembly 模板。您可以查看示例如何使用共享程序集 (DTO) 并为客户端提供服务。您可以在您的服务中使用其中的一部分,也可以不使用。