Blazor WebAssembly Server 项目如何引用客户端索引?

Tre*_*vor 8 blazor blazor-client-side blazor-webassembly

使用模板:启用 ASP.NET Core 托管的 Blazor WebAssembly 应用程序

它创建项目:

  • BlazorApp1.Client
  • BlazorApp1.服务器

我可以看到服务器有一个对客户端的项目引用,但我无法确定哪些代码允许服务器显示客户端?

服务器如何知道客户端索引文件位于另一个程序集中?

客户端代码是否托管在同一端口上的服务器项目中?

我有点迷失试图弄清楚这一点。

Hen*_*man 9

项目引用就在那里,以便 MsBuild (VS) 可以将客户端文件复制到服务器的 bin 目录。

然后,服务器有一个特殊的中间件组件来为客户端提供服务。以下几行都是关于提供静态文件的:

app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
Run Code Online (Sandbox Code Playgroud)

服务器实际上并不链接或引用客户端中的任何代码。

客户端代码是否托管在同一端口上的服务器项目中?

是的,只是为了方便。您可以将客户端托管在其他地方(但也要考虑 CORS 设置)。

我无法确定什么代码允许服务器显示客户端?

UseEndPoints 中的最后一行发生这种情况:

endpoints.MapControllers();                  // handle /api
endpoints.MapFallbackToFile("index.html");   // everything else
Run Code Online (Sandbox Code Playgroud)

请注意,因此您的 API 永远不会返回 404 代码。它将返回客户端应用程序的“此处无任何内容”页面。您将看到“HTML 不是 JSON”相关错误。