Asp.net MVC маршрутизация неоднозначна, два пути для одной страницы - PullRequest
5 голосов
/ 16 сентября 2008

Я пробую маршрутизацию 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 = "" }  
        );

    }

Спасибо!

Ответы [ 4 ]

6 голосов
/ 18 сентября 2008

Для таких проблем с маршрутизацией вы должны попробовать мою Route Debugger сборку (использовать только в тестировании) Это может помочь выяснить эти типы проблем.

P.S. Если вы пытаетесь защитить контроллер страниц, обязательно используйте атрибут [Authorize]. Не полагайтесь только на авторизацию URL.

6 голосов
/ 16 сентября 2008

Я бы предложил добавить явный маршрут для / Pages / в начале.

Проблема в том, что он обрабатывается маршрутом по умолчанию и получает:

controller = "Pages" action = "Index" id = ""

, которые в точности совпадают с параметрами вашего маршрута администратора.

2 голосов
/ 16 сентября 2008

Вы можете добавить ограничение к правилу по умолчанию, чтобы тег {Controller} не мог быть "Pages".

0 голосов
/ 17 сентября 2008

У вас есть первый токен / параметр маршрута {действия}, который вступает в конфликт с настройкой действия по умолчанию. Попробуйте изменить имя параметра в вашем маршруте или удалите имя действия по умолчанию.

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