новичок в asp.net mvc (используется v3 + бритва) и мне интересно, как наилучшим образом решить проблему с созданием динамических маршрутов на основе базы данных.По сути, основная навигация по сайту будет занесена в базу данных, и я хочу загрузить их как маршруты.То есть - загрузить список категорий из базы данных, а затем добавить маршруты в механизм маршрутизации, если это возможно ...
mysite.com / cars mysite.com/televisions mysite.com/computers
и т. д....
Каждая категория после косой черты происходит от БД, но есть регулярные записи, такие как / about и / contactus, которых не будет в базе данных, и они были статически введены в global.asax.. мой вопрос:
Для динамических URL базы данных я должен использовать пользовательский RouteHandler или, возможно, создаст ControllerFactory, который будет сопоставлять и обрабатывать запросы для записей, загруженных из базы данных.Возможно ли, чтобы DefaultControllerFactory обрабатывал маршрутизацию, если мои RouteHandler или CustomControllerFactory не находят маршрут в списке из базы данных?Спасибо за любую помощь, самый первый проект с этим, так что я не уверен, что лучший маршрут;) нет каламбура ...
Обновление:
Пробовалиспользуя ограничение маршрута, которое извлекается из базы данных, но теперь оно конфликтует с маршрутом по умолчанию ... вот мое пользовательское ограничение и маршруты:
public class CategoryListConstraint : IRouteConstraint
{
public CategoryListConstraint()
{
var repo = new Repository<Topic>();
var cats = repo.All();
var values = new List<string>();
foreach (var c in cats)
{
values.Add(c.URI.Replace("/", "").Replace("?", ""));
}
this._values = values.ToArray<string>();
}
private string[] _values;
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
// Get the value called "parameterName" from the
// RouteValueDictionary called "value"
string value = values[parameterName].ToString();
// Return true is the list of allowed values contains
// this value.
return _values.Contains(value);
}
}
, а вот маршруты:
Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Categories",
"{category}/{*values}",
new { controller = "Category", action = "List" },
new CategoryListConstraint()
);
Routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Домашняя страница www.mysite.com загружается по маршруту по умолчанию.Все URL-адреса, которые соответствуют списку ограничений, загружаются по маршруту категории ... но если у меня есть www.mysite.com/admin или www.mysite.com/aboutus, они выбираются маршрутом Категории, даже если значения не в списке ограничений.Confused ...