Это не тот способ, которым работает маршрутизация
Если вы определяете маршрут как
{controller}/{action}/{rootpointer}/{category}/{category2}/{page}
, а затем получаете доступ к своей странице, используя store / storecontent / pets / 1 тогда параметры вашего маршрута следующие:
- контроллер = магазин
- action = storecontent
- rootpointer = pets
- category = 1
- category2 = null
- page = null
На самом деле вы пытаетесь store / storecontent / pets /// 1 , ноВы не можете предоставить такие URL
RESTful?
Это также не RESTful.Зачем?Поскольку предоставление страницы как части вашего URL-адреса возвращает возможно недетерминированные результаты ...
Именно поэтому подкачка и сортировка должны (в терминах REST) предоставляться как переменные запроса, как в store/ storecontent / домашние животные? страница = 1 .Это, конечно, сработает.Они становятся произвольными переменными, не относящимися к маршрутизации как таковой.Попробуйте, если это также работает для вашего определения маршрута, потому что это может также работать, так как многие из ваших сегментов маршрута являются необязательными.
Возможное решение 1
Возможное решение (хотя я бы посоветовал вам сохранитьподкачка как переменная запроса) будет определять несколько маршрутов:
{controller}/{action}/{page}
{controller}/{action}/{rootpointer}/{page}
{controller}/{action}/{rootpointer}/{category}/{page}
{controller}/{action}/{rootpointer}/{category}/{category2}/{page}
каждому из них потребуются ограничения на page = "\d+"
, поэтому маршрутизация будет продолжаться до тех пор, пока не будет получен правильный.
Возможное решение 2
Сохраняя страницу как отдельный параметр запроса, никто не сказал, что вы не можете определить его как часть значений по умолчанию:
routes.MapRoute(
"Some route",
"{controller}/{action}/{rootpointer}/{category}/{category2}",
new {
rootpointer = UrlParameter.Optional,
category= UrlParameter.Optional,
category2 = UrlParameter.Optional,
page = 1
}
);
Как вы можете видеть, я указал значение по умолчанию для страницы,Я знаю, что вы установили его как необязательный, но все, что я здесь говорю, это то, что вы можете предоставить значения по умолчанию для значений, не связанных с маршрутом.Например, запрос переменных.
Дополнительное наблюдение
Если вы предоставляете ограничения констант для одного значения для контроллера и действия, нет необходимости сохранять их в определении маршрута в качестве значений маршрута так, как вы это делали.Ваш текущий маршрут, как он определен в данный момент, будет лучше:
routes.MapRoute(
"StoreContent", // Route name
"Store/StoreContent/{rootpointer}/{category}/{category2}/{page}", // URL with parameters
new {
controller = "Store",
action = "StoreContent",
rootpointer = UrlParameter.Optional,
category = UrlParameter.Optional,
category2 = UrlParameter.Optional,
page = UrlParameter.Optional
}
// no need for constraints
);