ASP.NET Core Middleware MVC / React MapSpaFallbackRoute - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь настроить .NET Core WebApplication, который использует SPA для обслуживания части приложения React и MVC для моей области администратора.

Приложение React доступно по адресу "/" Часть MVC должнабыть доступным по адресу "/ admin"

Я настроил свое промежуточное ПО следующим образом:

// Standard routing
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseSpaStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "admin/{controller=Home}/{action=Index}/{id?}");
        });

        // Fallback Route for /admin and /api
        app.MapWhen(x => x.Request.Path.Value.ToLower().StartsWith("/admin") || x.Request.Path.Value.ToLower().StartsWith("/api"), builder =>
        {
            builder.UseMvc(routes =>
            {
                routes.MapSpaFallbackRoute(
                    name: "spa-fallback",
                    defaults: new { controller = "Home", action = "Index" });
            });
        });

        // use SPA for other requests
        app.MapWhen(x => !(x.Request.Path.Value.ToLower().StartsWith("/admin") || x.Request.Path.Value.ToLower().StartsWith("/api")), builder =>
        {
            builder.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";

                if (env.IsDevelopment())
                {
                    spa.UseReactDevelopmentServer(npmScript: "start");
                }
            });
        });

Это работает, как и предполагалось, в режиме разработки на моем компьютере (с использованием ReactDevelopmentServer).

Когда я делаю релиз и публикую его, все запросы направляются в приложение React (SPA), что делает недоступным мою / MVC часть MVC.

Что не так с моей настройкой?Буду признателен за любую подсказку.

Спасибо!

1 Ответ

0 голосов
/ 04 декабря 2018

Боже мой!

Я нашел проблему.Он связан с кодом реакции Boilerplate, созданным Visual Studio: он использует файл с именем registerServiceWorker.js, который является чистым злом!Он использует проклятый липкий кеш браузера, который отображает все почти статично.

. NET часть шаблона Visual Studio верна, вы можете просто использовать стандартную установку промежуточного программного обеспечения, и все запросы, не относящиеся к Spa, будут перенаправлены, как ожидается:

// Standard routing
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseSpaStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "admin/{controller=Home}/{action=Index}/{id?}");
        });

        app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "ClientApp";

            if (env.IsDevelopment())
            {
                spa.UseReactDevelopmentServer(npmScript: "start");
            }
        });
...