【问题标题】:How does Blazor WebAssembly Server project reference the Client Index?Blazor WebAssembly Server 项目如何引用客户端索引?
【发布时间】:2021-12-31 13:34:54
【问题描述】:

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

它创建项目:

  • BlazorApp1.Client
  • BlazorApp1.Server

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

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

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

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

【问题讨论】:

    标签: blazor blazor-client-side blazor-webassembly


    【解决方案1】:

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

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

    app.UseBlazorFrameworkFiles();
    app.UseStaticFiles();
    

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

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

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

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

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

    endpoints.MapControllers();                  // handle /api
    endpoints.MapFallbackToFile("index.html");   // everything else
    

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

    【讨论】:

      【解决方案2】:

      添加到 Henk 的答案中:

      index.html 属于 Client 项目。它不会在编译时被复制。如何在运行时访问 index.html?它是否嵌入在其中一个 DLL 中?

      这是我问自己的问题。看起来你在开发时在服务器的 bin/ 目录中生成了一个文件:BlazorApp2.Server.staticwebassets.runtime.json - 你的文件名会有所不同。

      此文件包含您计算机上 wwwroot 的绝对路径,以及此目录中所有文件的相对路径 - index.html 就是其中之一。

      dotnet publish 上,输出目录将包含 wwwroot 及其内容。

      【讨论】:

      • 是的,我只是把它放在评论中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2020-09-10
      • 2021-09-15
      • 2020-09-19
      • 2021-04-16
      • 2020-08-27
      相关资源
      最近更新 更多