Маршрутизация не выполняется, когда указана только категория - PullRequest
1 голос
/ 27 мая 2010

Мой сайт использует категории и подкатегории.

Мне бы хотелось следующее отображение:

/ Категория / Фрукты

/ Категория / Фрукты / Яблоки

Но если я использую следующее:

routes.MapRoute( 
            "Category", // Route name 
            "Category/{category}/{subcategory}", // URL with parameters 
            new { controller = "Entity", action = "Category" } // Parameter defaults 
        );

Я получаю 404 за / Категория / Фрукты, однако / Категория / Фрукты / Яблоки работают нормально. Я бы хотел, чтобы / Category / Fruit также работал, но я не могу добавить другой маршрут с таким же именем. Как мне обойти это?

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 27 мая 2010

Укажите значение по умолчанию для subcategory

routes.MapRoute( 
        "Category", // Route name 
        "Category/{category}/{subcategory}", // URL with parameters 
        new { controller = "Entity", action = "Category", subcategory = "Some value" } // Parameter defaults 
    );
0 голосов
/ 27 мая 2010

Это будет работать для вашего сценария

routes.MapRoute(
    "Default", // Route name
    "Category/{category}/{subcategory}/{id}", // URL with parameters
    new { controller = "fruit", action = "apples", id = UrlParameter.Optional } // Parameter defaults
);

и ответит на URL Http: //.../Category/Fruit/Apples/

0 голосов
/ 27 мая 2010

Фил Хаак имеет в своем блоге маршрутный отладчик .

Эта утилита отображает данные маршрута, полученные из запроса текущего запроса, в адресной строке.Таким образом, вы можете ввести различные URL-адреса в адресной строке, чтобы увидеть, какой маршрут соответствует

0 голосов
/ 27 мая 2010

Имя не требуется для правил маршрутизации. Вы можете установить его на ноль.

Вы можете описать свою маршрутизацию с помощью единственного правила, если отметите второй параметр как необязательный. Или установите значение по умолчанию для второго параметра как: zerkms предлагает

...