我正在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] 删除。
我来说两句