Я подумываю изучить структуру ASP.NET MVC для будущего проекта. Могу ли я использовать расширенную маршрутизацию для создания длинных URL-адресов на основе иерархии карты сайта?
Пример пути навигации:
Домой> Магазин> Продукты> Для дома> Кухня> Посуда> Кухонные гарнитуры> Антипригарное покрытие
Типичный (я думаю) URL-адрес MVC:
http://example.com/products/category/NonstickCooksets
Желаемый URL:
http://example.com/shop/products/household/kitchen/cookware/cooksets/nonstick
Я могу это сделать?





Маршрутизация MVC позволяет вам определять практически любую структуру, которую вы хотите, вам просто нужно определить, что каждая из частей означает семантически. Вы можете иметь "жестко запрограммированные" биты, например "магазин / товары", а затем определить остальные как переменные, "{категория} / {подкатегория} / {специальность}" и т. д.
Вы также можете определить несколько маршрутов, которые будут соответствовать одной и той же конечной точке, если хотите. По сути, когда URL-адрес входит в ваше приложение MVC, он проходит через таблицу маршрутизации, пока не найдет соответствующий шаблон, заполнит переменные и передаст запрос соответствующему контроллеру для обработки.
Хотя маршрут по умолчанию представляет собой простую настройку типа Controller, Action, Id, это, конечно, не предел того, что вы можете сделать.
Зак, если я правильно понимаю, вам нужна неограниченная глубина подкатегорий. Ничего особенного, поскольку в MVC Preview 3 (я думаю, 3 или 4) эта проблема решена.
Просто определите маршрут, например
"{контроллер} / {действие} / {* categoryPath}"
для URL-адреса, например:
http://example.com/shop/products/household/kitchen/cookware/cooksets/nonstick
у вас должен быть ShopController с действием Products:
public class ShopController : Controller
{
...
public ActionResult Products(string categoryPath)
{
// the categoryPath value would be
// "household/kitchen/cookware/cooksets/nonstick". Process it (for ex. split it)
// and then decide what you do..
return View();
}