.Net Core 2.2 Areas 路由,第一个MapAreaRoute 设置匹配多个Controller

在.Net Core 2.2 版本中使用 Area, 发现配置第一个(Admin) MapAreaRoute 路由可以匹配多个 {Controller}/{Action}

路由设置

            app.UseMvc(routes =>
            {
                //routes.MapRoute(
                //   name: "areas",
                //   template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
                // ); 
                routes.MapAreaRoute(
                name: "MyAreaAdmin",
                areaName: "Admin",
                template: "Admin/{controller=home}/{action=index}/{id?}");

                routes.MapAreaRoute(
                   name: "MyAreaAPI",
                   areaName: "API",
                   template: "API/{controller=home}/{action=index}/{id?}");

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

项目截图

.Net Core 2.2 Areas 路由,第一个MapAreaRoute 设置匹配多个Controller_第1张图片

浏览器访问

/home/index 可以正常访问,但是 /admin/home/index 匹配多个端点

.Net Core 2.2 Areas 路由,第一个MapAreaRoute 设置匹配多个Controller_第2张图片

.Net Core 2.2 Areas 路由,第一个MapAreaRoute 设置匹配多个Controller_第3张图片

 

解决办法

这是因为 从 .Net Core 2.2 版本开始 默认开启了端点路由,我们把他禁用就可以了,使用传统路由模式

    services.AddMvc(options =>
    { 
        //Core 2.2+ 默认启动端点路由
        options.EnableEndpointRouting = false;
    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

 

你可能感兴趣的:(.Net Core 2.2 Areas 路由,第一个MapAreaRoute 设置匹配多个Controller)