ASP.NET Core 2默认路由有区域

Gre*_*Woz 4 c# asp.net-routing asp.net-core-mvc .net-core asp.net-core

cI经历了有关区域路由的各种帖子,但我仍然无法解决我的问题.

我想以有两条路线的方式拆分我的应用程序.

  • /Areas/Panel
  • /Areas/Website

在每个区域内都有HomeController与行动相对应的适当方法.

每当用户登陆任何1级路线时,我都希望如此:

  • /家
  • /联系
  • /约/公司
  • 等等

是针对 /Areas/Website/{controller}/{action}

或者替代

  • /面板
  • /板/家
  • /板/用户/ 2
  • 等等

/Areas/Panel/{controller}/{action}

我目前的MVC路线是:

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

            routes.MapRoute(
                name: "area",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
        });
Run Code Online (Sandbox Code Playgroud)

但它不起作用,可能是因为我不完全理解如何告诉路由器将Website区域用作默认值.我在控制器本身之前尝试了各种指令,但它没有用.

我可以问你的意见吗?

先感谢您.

Nig*_*888 12

其中一个原因是因为您以错误的顺序注册了路由而无法正常工作.路线从路线表的顶部到底部进行评估,第一场比赛获胜.

另一个问题是,MapAreaRoute如果您希望将请求指向该Website区域,则需要将"默认"路由设置为区域路径(使用扩展方法).

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

    routes.MapAreaRoute(
        name: "default",
        areaName: "Website",
        template: "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)

参考:为什么在asp.net mvc中的常用路由之前首先映射特殊路由?