Я создаю корзину ASP.NET MVC/Entity Framework, чтобы лучше познакомиться с технологией. Одна из функций, которые я хотел иметь, - это URL-адреса, основанные на уникальных пули вместо того, чтобы вставлять идентификаторы сущностей в URL-адрес. Некоторые примеры:Mvc Custom Route and Breadcrumb Стратегии?
- /
- /информация
- /информация/о-нас
- /информация/контакт-нас
- /Мужская одежда-
- /мужской, одежда/mens- рубашки
- /мужской, одежда/мужские футболки/тест-тенниска
Пуль являются уникальными для всех типов контента, но, например, тест-тенниска может появиться в нескольких категориях:
- /мужской, одежда/мужские футболки/тест-Tshirt
- /мужские, одежды/оформлении/test-tshirt
Я создал собственный маршрут, который принимает последний пучок в пути и использует его для поиска текущей страницы.
Это хорошо работает, и у меня есть хорошая гибкость при реализации пользовательской логики и шаблонов отображения (типы содержимого имеет свойство «View», а так я могу динамически установить вид в контроллере).
Однако, я немного спотыкаюсь о внедрении панировочных сухарей. Быстрым и грязным способом было бы использовать путь от URL-адреса, делать запрос для каждого пула в пути и игнорировать, действительно ли страница является дочерним элементом категории. Другим решением было бы использовать что-то вроде MvcSiteMapProvider и создать дерево XML, поскольку содержимое будет добавлено на бэкэнд ... Я не уверен, насколько хорошо эта конкретная реализация будет работать, потому что она, похоже, довольно сосредоточена на стандарте {controller}/{action}/{id}.
Какие другие типы реализаций вы использовали или видели?
Информативный, спасибо! Необходимо изучить свойство URL, не видел его в примерах. Быстрый вопрос, не связанный с моим оригиналом ... в чем причина проверки длины пути перед проверкой равенства пути в вашей коллекции маршрутов? – Sam
Спасибо, сделал быструю проверку, и параметр «url» работает отлично. Найден xsd для узлов карты сайта, и у него есть тонны дополнительной функциональности. Мне не нужно настраивать сборку для моего приложения (ролевой доступ, httpMethod, видимость, канонические, мета-роботы и т. Д.). Хорошая вещь. – Sam
Я проверяю длину как повышение производительности. Целочисленное сравнение выполняется намного быстрее, чем сравнение двух массивов байтов (строк), поэтому при медленном сравнении строк нет смысла, если длина не равна. Имейте в виду, что это сравнение должно быть выполнено для каждого входящего запроса, поэтому оно должно быть как можно быстрее. ПРИМЕЧАНИЕ. Я просто проверил источник .NET через Reflector, и Microsoft уже позаботилась о сравнении длины строки сначала в методе Equals, поэтому, я думаю, я могу взять эту строку. – NightOwl888