启动ASP .NET Core上的MapSpaFallbackRoute

时间:2018-04-05 10:12:00

标签: asp.net-core routes .net-core asp.net-mvc-areas

我在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 , 我一直试试这个,我的应用程序返回404(未找到)。 那么,定义MapSpaFallbackRoute的正确方法是什么,我希望在Admin区域使用HomeController,使用Index action

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

        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?}");
        });

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

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 =>
{

答案 1 :(得分:0)

在搜索此问题后,我意识到 Dotnet core 3 不支持 MapSpaFallbackRoute 方法,因此要解决此问题,您应该在终端 Dotnet 上使用此命令手动添加 Spa 包

<块引用>

添加包 Microsoft.AspNetCore.SpaServices --version 3.1.16

您可以在此链接查看版本

NuGet Gallery

相关问题