Asp.net webforms routing: необязательные параметры
Я хочу добавить необязательные параметры в свою таблицу маршрутизации.
Например, я бы хотел, чтобы пользователи просматривали каталог продуктов следующим образом:
http://www.domain.com/browse/by-category/electronics/1,2,3 и т.д.
Теперь я создал такой маршрут:
routes.MapPageRoute(
"ProductsBrowse",
"browse/{BrowseBy}/{Category}",
"~/Pages/Products/Browse.aspx"
);
Однако проблема заключается в том, что когда пользователь входит http://www.domain.com/browse, я бы хотел, чтобы они представили другую страницу, на которой они могут выбрать способ как просматривать. Поэтому параметры {BrowseBy} и {Category} не будут использоваться.
Есть ли способ обойти это, чтобы создать отдельные маршруты для каждого из сценариев?
Спасибо за ваше время!
С уважением,
Марк
Ответы
Ответ 1
Я просто создаю отдельный маршрут.
Тем не менее, вы можете определить пользовательский RouteHandler, который на основе определенного вами соглашения будет автоматически отправлять эти особые случаи, как если бы у вас был другой маршрут.
В качестве альтернативы вы можете использовать пользовательский RouteHandler вместе с соглашением, чтобы избежать необходимости указывать конкретную страницу на ваших маршрутах. Это эквивалент того, что делает asp.net MVC.
Ответ 2
Я только наткнулся на этот вопрос и знал, что должен быть способ сделать это. Существует -
MapPageRoute
имеет перегрузку, которая позволит вам указать значения по умолчанию. здесь пример использования на основе вашего кода:
routes.MapPageRoute(
"ProductsBrowse",
"browse/{BrowseBy}/{Category}",
"~/Pages/Products/Browse.aspx",
false,
new RouteValueDictionary { { "Category", string.Empty } }
);
Поэтому, если пользователь не укажет категорию, этот маршрут по-прежнему будет удален. Проблема, связанная с использованием двух отдельных маршрутов, заключается в том, что у меня есть настройка ссылок на моем сайте, которые генерируются по имени маршрута, и вы не можете иметь два маршрута с одинаковым именем.
Здесь хорошая документация из MSDN: здесь
Ответ 3
попробуйте следующее:
routes.MapPageRoute(
"ProductsBrowse",
"browse/{BrowseBy}/{Category}/{*queryvalues}",
"~/Pages/Products/Browse.aspx"
);