ASP.NET 核心 2 默认路由具有区域



c我浏览了有关区域路由的各种帖子,但仍然无法解决我的问题。

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

  • /Areas/Panel
  • /Areas/Website

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

我希望每当用户降落到任何 1 级路由时,即:

  • /家
  • /联系
  • /
  • 关于/公司
  • 等。

被定向到/Areas/Website/{controller}/{action}

或者对于

  • /面板
  • /
  • 面板/首页
  • /
  • panel/users/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?}");
        });

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

我可以征求你的意见吗?

提前谢谢你。

不起作用的一个原因是您以错误的顺序注册了路由。从路由表的顶部到底部评估路线,第一场比赛获胜。

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

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

参考:为什么在 asp.net MVC 中先映射特殊路由,然后再映射公共路由?

最新更新