是否可以通过MVC应用程序中的特定控制器操作为Blazor应用程序提供服务?

时间:2019-10-21 04:15:18

标签: asp.net-core .net-core asp.net-core-mvc blazor blazor-client-side

我想在一个现有的ASP.NET Core 3.0 MVC项目中设置一个控制器动作,以服务Blazor应用程序。我过去曾见过与其他SPA框架类似的内容,“操作视图”仅包含包含捆绑包的script标签,通常还有其他一些设置,例如将SPA构建放在MVC项目的wwwroot上。

在看Blazor应用程序时,似乎在某种程度上相似,其中index.html文件包含wasm脚本。但老实说,我不确定从哪里开始进行设置。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

似乎您正在使用Blazor客户端。基本上,Blazor客户端应用程序的条目加载<script> blazor.webassembly.js。并且此脚本将动态下载所有静态资产(*.wasm*.dlls)。请注意,如果可以使这些资产可用,即使没有ASP.NET Core,也可以托管Blazor客户端应用程序。

由于您使用ASP.NET Core MVC作为服务器,因此一种简单的方法是:

  1. 添加对Microsoft.AspNetCore.Blazor.Server的程序包引用,以便我们仅用一个代码即可提供*.wasm *.dll文件。
    <PackageReference Include="Microsoft.AspNetCore.Blazor.Server" Version="3.0.0-preview9.19465.2" />
    
  2. 向您的ClientSide项目添加项目引用,以便我们可以从源代码生成静态信息。假设您的客户端Web组装应用为MyClientSideBlazorApp

    <ProjectReference Include="..\MyClientSideBlazorApp\MyClientSideBlazorApp.csproj" />
    
  3. 现在您可以在Startup.cs中注册一个中间件来提供静态文件:

    app.UseClientSideBlazorFiles<MyClientSideBlazorApp.Startup>();
    app.UseStaticFiles();
    
  4. 最后,在您要为其提供服务的任何页面/视图中,例如Home/Privacy.cshtml视图文件,添加一个<script>来加载条目,还添加一个{{1 }}元素以确保相对路径正确。

    <base>

现在应该可以正常工作了。