具有区域

时间:2018-01-21 15:43:31

标签: c# asp.net-core .net-core asp.net-core-mvc asp.net-routing

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

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

我可以征求您的意见吗?

提前谢谢。

1 个答案:

答案 0 :(得分:8)

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

另一个问题是你需要制作"默认"如果您希望将请求定向到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?}");
});

参考:Why map special routes first before common routes in asp.net mvc?