Есть ли способ обслуживать приложение Blazor из определенного действия контроллера в приложении MVC? - PullRequest
1 голос
/ 21 октября 2019

Я бы хотел настроить действие контроллера в уже существующем проекте ASP.NET Core 3.0 MVC для обслуживания приложения Blazor. В прошлом я видел нечто похожее с другими средами SPA. В представлении для действия, включенном в действие, содержится тег сценария с пакетом, обычно есть другие настройки, например, размещение сборки SPA на wwwroot для проекта MVC.

Глядя на приложение Blazor, в некоторой степени кажется, что файл index.html содержит скрипт wasm. Но я, честно говоря, не уверен, с чего начать. Есть идеи?

1 Ответ

1 голос
/ 21 октября 2019

Кажется, вы используете Blazor Client Side. По сути, запись для клиентского приложения Blazor - <script>, которая загружает blazor.webassembly.js. И этот скрипт будет загружать все статические ресурсы (*.wasm и *.dlls) динамически. Обратите внимание, что если вы можете сделать эти ресурсы доступными, вы можете разместить приложение Blazor Client Side даже без ASP.NET Core.

Поскольку вы используете 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 Project, чтобы мы могли генерировать статистику из исходного кода. Допустим, ваше приложение веб-сборки на стороне клиента имеет вид MyClientSideBlazorApp:

    <ProjectReference Include="..\MyClientSideBlazorApp\MyClientSideBlazorApp.csproj" />
    
  3. И теперь вы можете зарегистрировать промежуточное программное обеспечение в Startup.cs для обслуживания статических файлов:

    app.UseClientSideBlazorFiles<MyClientSideBlazorApp.Startup>();
    app.UseStaticFiles();
    
  4. Наконец, на любой странице / представлении, которое вы хотите использовать для блейзора, например, файл представления Home/Privacy.cshtml, добавьте <script> для загрузки записи, а также <base> элемент для проверки правильности относительного пути.

    @{
       Layout = null;
    }
    <base href="/">
    
    ... 
    
    <app>Loading...</app>
    
    <script src="/_framework/blazor.webassembly.js"></script>
    

Теперь все должно работать нормально.

...