Asp.net Неоднозначная маршрутизация MVC, два пути для одной и той же страницы
-
09-06-2019 - |
Вопрос
Я пробую ASP.NET маршрутизацию MVC и, конечно же, наткнулся на проблему.У меня есть раздел /Admin/Pages/, и он также доступен через /Pages/, чего не должно быть.Что я мог упустить?
Код маршрутизации в global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Pages", // Route name
"Admin/Pages/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Pages", action = "Index", id = "" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Home", action = "Index", id = "" }
);
}
Спасибо!
Решение
Я бы предложил добавить явный маршрут для /Pages/ в начале.
Проблема в том, что он обрабатывается маршрутом по умолчанию и выводится:
контроллер = "Страницы" действие = "Индекс" идентификатор = ""
которые точно совпадают с параметрами для вашего маршрута администратора.
Другие советы
Для решения подобных проблем с маршрутизацией вам следует попробовать мой Отладчик маршрутов сборка (используется только при тестировании).Это может помочь разобраться в такого рода проблемах.
P.S.Если вы пытаетесь защитить контроллер страниц, обязательно используйте атрибут [Authorize].Не полагайтесь только на авторизацию URL.
Вы могли бы добавить ограничение к правилу по умолчанию, чтобы тег {Controller} не мог быть "Страницами".
У вас есть токен / параметр первого маршрута {action}, который вступает в конфликт с настройкой действия по умолчанию.Попробуйте изменить имя параметра в своем маршруте или удалить название действия по умолчанию.