默认路由不适用于区域路由

我正在ASP.NET Core 2.2中创建一个应用程序。在Startup.cs文件中,已经有一条默认路由,我为管理区域定义了另一条路由:

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

管理员区域是Admin使用角色授权的[Authorize(Roles = "Admin")]但是,当我启动该应用程序时,默认情况下它会调用该区域路由,尽管用户看不到任何东西并且他得到了未经授权的页面。为什么应用程序将区域路由用作默认路由?

通过说,{area=Admin}您是使area零件可选。因此,不包含区域的路线也将与该区域匹配(Admin作为选定区域)。

如果要确保只有一条路径/Admin/触发您的区域,则可以这样做:

routes.MapRoute(
    name: "admin",
    template: "Admin/{controller=User}/{action=Index}/{id?}",
    defaults: new { area = "Admin" });

您还可以使用此快捷方式方法来为您的区域设置路线约束:

routes.MapAreaRoute("admin", "Admin",
    "Admin/{controller=User}/{action=Index}/{id?}");

同样,您注册路线的顺序也很重要。通常,将使用与路线匹配的第一个路线模板。因此,由于您的管理路由非常具体,因此您可能应该首先列出该路由,然后再回退到默认路由。

正如MVC中有关路由区域文档所述

常规工艺路线取决于顺序。通常,带有区域的路由应比没有区域的路由更具体地放在路由表中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章