有没有办法通过 MVC 应用程序中的特定控制器操作为 Blazor 应用程序提供服务?
Is there a way to serve a Blazor app from a specific controller action in a MVC app?
我想在现有的 ASP.NET Core 3.0 MVC 项目中设置一个控制器操作来为 Blazor 应用程序提供服务。我在过去看到过与其他 SPA 框架类似的东西,操作的视图仅包含包含捆绑包的脚本标记,通常还有一些其他设置,例如将 SPA 构建放置在 MVC 项目的 wwwroot 上。
查看 Blazor 应用程序,它在某种程度上似乎相似,其中 index.html 文件包含 wasm 脚本。但老实说,我不确定从哪里开始设置它。有什么想法吗?
您似乎在使用 Blazor 客户端。基本上,Blazor 客户端应用程序的 条目 是 加载 blazor.webassembly.js
的 <script>
。此脚本将动态下载所有静态资产(*.wasm
和 *.dlls
)。请注意,如果您可以提供这些资产,则即使没有 ASP.NET Core,您也可以托管 Blazor 客户端应用程序。
由于您使用 ASP.NET 核心 MVC 作为服务器,一个简单的方法是:
- 添加对
Microsoft.AspNetCore.Blazor.Server
的包引用,以便我们可以仅使用一个代码来提供 *.wasm
*.dll
文件。
<PackageReference Include="Microsoft.AspNetCore.Blazor.Server" Version="3.0.0-preview9.19465.2" />
添加对您的客户端项目的项目引用,以便我们可以从源代码生成静态信息。假设您的客户端 Web 程序集应用程序是 MyClientSideBlazorApp
:
<ProjectReference Include="..\MyClientSideBlazorApp\MyClientSideBlazorApp.csproj" />
现在您可以在 Startup.cs 中注册一个中间件来为静态文件提供服务:
app.UseClientSideBlazorFiles<MyClientSideBlazorApp.Startup>();
app.UseStaticFiles();
最后,在您想要为 blazor 提供服务的任何 page/view 中,例如 Home/Privacy.cshtml
视图文件,添加一个 <script>
以加载条目还有一个 <base>
元素来确保相对路径是正确的。
@{
Layout = null;
}
<base href="/">
...
<app>Loading...</app>
<script src="/_framework/blazor.webassembly.js"></script>
现在应该可以正常工作了。
我想在现有的 ASP.NET Core 3.0 MVC 项目中设置一个控制器操作来为 Blazor 应用程序提供服务。我在过去看到过与其他 SPA 框架类似的东西,操作的视图仅包含包含捆绑包的脚本标记,通常还有一些其他设置,例如将 SPA 构建放置在 MVC 项目的 wwwroot 上。
查看 Blazor 应用程序,它在某种程度上似乎相似,其中 index.html 文件包含 wasm 脚本。但老实说,我不确定从哪里开始设置它。有什么想法吗?
您似乎在使用 Blazor 客户端。基本上,Blazor 客户端应用程序的 条目 是 加载 blazor.webassembly.js
的 <script>
。此脚本将动态下载所有静态资产(*.wasm
和 *.dlls
)。请注意,如果您可以提供这些资产,则即使没有 ASP.NET Core,您也可以托管 Blazor 客户端应用程序。
由于您使用 ASP.NET 核心 MVC 作为服务器,一个简单的方法是:
- 添加对
Microsoft.AspNetCore.Blazor.Server
的包引用,以便我们可以仅使用一个代码来提供*.wasm
*.dll
文件。<PackageReference Include="Microsoft.AspNetCore.Blazor.Server" Version="3.0.0-preview9.19465.2" />
添加对您的客户端项目的项目引用,以便我们可以从源代码生成静态信息。假设您的客户端 Web 程序集应用程序是
MyClientSideBlazorApp
:<ProjectReference Include="..\MyClientSideBlazorApp\MyClientSideBlazorApp.csproj" />
现在您可以在 Startup.cs 中注册一个中间件来为静态文件提供服务:
app.UseClientSideBlazorFiles<MyClientSideBlazorApp.Startup>(); app.UseStaticFiles();
最后,在您想要为 blazor 提供服务的任何 page/view 中,例如
Home/Privacy.cshtml
视图文件,添加一个<script>
以加载条目还有一个<base>
元素来确保相对路径是正确的。@{ Layout = null; } <base href="/"> ... <app>Loading...</app> <script src="/_framework/blazor.webassembly.js"></script>
现在应该可以正常工作了。