5.3. Пользовательская маршрутизация

Пользовательская маршрутизация в Umbraco

Существует несколько способов управлять маршрутизацией в Umbraco: настраивать как входящий запрос находит контент и создавать собственные маршурты MVC, которые интегрируются с жизненным циклом запроса в Umbraco

Настройка жизненного цикла запроса

Ниже представлен список способов, которыми можно настроить жизненный цикл запроса, это делается с помощью классов плагинов Umbraco, событий или определения собственных маршрутов.

IContentFinder

Весь контент Umbraco ищется основываясь на URL текущего запроса с помощью IContentFinder. IContentFinder довольно легко создать и реализовать самостоятельно, что позволит маршрутизировать любой URL к определенному элементу контента Umbraco.
Более подробная информация имеется в последующем разделе.

IContentFinder "последнего шанса"

IContentFinder "последнего шанса" это специальная реализация IContentFinder для обработки 404. Можно реализовать собственный плагин, чтобы определить, какая страница контента будет отображаться, если URL не соответствует ни одному елементу контента Umbraco.
Для обработки 404 нужно создать собственный IContentFinder и установить его в ContentLastChanceFinder. ContentLastChanceFinder будет всегода возвращать статус 404. Например:
ContentLastChanceFinderResolver.Current.SetFinder(new My404ContentFinder());

Пользовательские маршруты MVC

Можно определить пользовательские маршруты MVC для работы с жизненным циклом запроса Umbraco. Для этого необходимо использовать реализацию Umbraco.Web.Mvc.UmbracoVirtualNodeRouteHandler с пользовательским маршрутом.
Например:
//custom route to MyProductController which will use a node with ID 1234 as the 
// IPublishedContent for the current rendering page
routes.MapUmbracoRoute(
    "test",
    "Products/{action}/{sku}",
    new
    {
        controller = "MyProduct",
        sku = UrlParameter.Optional
    },
    new UmbracoVirtualNodeByIdRouteHandler(1234));
Более подробная информация имеется в последующем разделе.

PublishedContentRequest.Prepared event

Можно подписаться на события, чтобы знать когда PublishedContentRequest готов обрабатываться. Это позволит изменять что угодно (контент, шаблоны и т.д.):
// public static event EventHandler<EventArgs> Prepared;

PublishedContentRequest.Prepared += (sender, args) =>
{
  var request = sender as PublishedContentRequest;
  // do something…
}