Asp.net Неоднозначная маршрутизация MVC, два пути для одной и той же страницы

StackOverflow https://stackoverflow.com/questions/70371

  •  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}, который вступает в конфликт с настройкой действия по умолчанию.Попробуйте изменить имя параметра в своем маршруте или удалить название действия по умолчанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top