Играю с новой функцией перезаписи URL-адресов для веб-форм, но у меня возникают проблемы с попыткой объявить параметры необязательными.
Вот сценарий. У меня есть функция поиска, которая принимает два параметра: артикул и имя. В идеале я бы хотел, чтобы URL-адрес этой функции поиска был /products/search/skuSearchString/nameSearchString. У меня также есть различные страницы управления, которые должны сопоставляться с такими вещами, как /products/management/ или /products/summary/. Другими словами, последние два параметра в URL-адресе должны быть необязательными — может быть одна строка поиска, две или ни одной.
Вот как я объявил свой виртуальный URL:
Friend Const _VIRTUALURL As String = "products/{action}/{sku}/{*product}"
И добавил следующие значения по умолчанию:
Me.Defaults = New Web.Routing.RouteValueDictionary(New With {.sku = "/"})
Me.Defaults = New Web.Routing.RouteValueDictionary(New With {.product = "/"})
У меня две проблемы с этой настройкой. Наиболее важным является то, что URL-адрес, похоже, ожидает параметр sku. Таким образом, /products/summary/ не может быть найден, но /products/summary/anyTextAtAll/ сопоставляется с правильной страницей. Вы получите тот же результат, если по умолчанию установлено значение «/» или «». Как сделать так, чтобы параметры sku и product были необязательными?
Второе более интересно. В идеале я хотел бы, чтобы URL-адрес мог определить, есть ли у него строка поиска продукта или строка поиска URL-адреса. Очевидный способ сделать это — установить одно или другое значение по умолчанию, которое я могу просто выбрать и игнорировать, но есть ли более аккуратный способ справиться с этим?