Маршрут по умолчанию не работает с маршрутом области - PullRequest
1 голос
/ 07 апреля 2019

Я создаю приложение в 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")].Но когда я запускаю приложение, оно по умолчанию вызывает этот маршрут, хотя пользователь ничего не видит и получает неавторизованную страницу.Почему приложение использует маршрут области в качестве маршрута по умолчанию?

1 Ответ

2 голосов
/ 07 апреля 2019

Говоря {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, :

Обычная маршрутизация зависит от порядка.В общем, маршруты с областями следует размещать раньше в таблице маршрутов, поскольку они более специфичны, чем маршруты без области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...