启动时的 MapSpaFallbackRoute ASP .NET Core

MapSpaFallbackRoute on Startup ASP .NET Core

我在 Net Core App 上有一个名为 Admin 的区域,在启动时设置 MapSpaFallbackRoute,我想这样设置,

app.UseMvc(routes =>
    {
      routes.MapSpaFallbackRoute(
      name: "spa-fallback-admin",
      defaults: new { area="Admin", controller = "Home", action = "Index" });
    });

这是定义 MapSpaFallbackRoute 的正确方法吗?我怀疑 MapSpaFallbackRoute 有属性 area, 我一直在尝试这个,我的应用程序 return 404(未找到)。 所以,定义 MapSpaFallbackRoute 的正确方法是什么,我想在管理区域使用 HomeController,并使用索引操作

这是我的完整代码,我想用路径管理请求,管理区域的控制器应该处理它。

        app.MapWhen(context => context.Request.Path.Value.StartsWith("/admin"), builder =>
        {
            builder.UseMvc(routes =>
            {
                routes.MapRoute(
                name: "default",
                template: "{area=Admin}/{controller=Home}/{action=Index}/{id?}");

                routes.MapSpaFallbackRoute(
                name: "spa-fallback-admin",
                defaults: new { area="Admin", controller = "Home", action = "Index" });
            });
        });

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

            routes.MapSpaFallbackRoute(
                name: "spa-fallback",
                defaults: new { controller = "Home", action = "Index" });
            routes.MapRoute(
                name: "areas",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
        });

感谢您的帮助

MapSpaFallbackRoute 的作用是允许定义路由参数的默认值以处理 404 情况。

现在回答你的问题:是的,MVC routing (both attribute/convention) supports {area} 作为路由参数,因此你可以编写上面的代码来定义默认值。

您没有显示您的路由设置,所以我认为您的主要问题是您没有在路由模板中指定 {area} 参数。

例如,如果考虑约定路由,以下应该可行:

app.UseMvc(routes => {
           routes.MapRoute("default", "{area}/{controller}/{action}/{id?}");
           routes.MapSpaFallbackRoute(
             name: "spa-fallback-admin",
             defaults: new { area="Admin", controller = "Home", action = "Index" });
});

更新后的问题: 尝试使用 .UseWhen 而不是 .MapWhen:

app.UseWhen(context => context.Request.Path.Value.StartsWith("/admin"), builder =>
{

搜索此问题后,我意识到 Dotnet 核心 3 不支持 MapSpaFallbackRoute 方法,因此要解决此问题,您应该在终端 Dotnet

上使用此命令手动添加 Spa 包

add package Microsoft.AspNetCore.SpaServices --version 3.1.16

你可以在这里查看版本link

NuGet Gallery