Кентико нажимает на событие "Страница не найдена"

Моя задача - зарегистрировать исключение и страницу, не найденную в нашей базе данных, из проекта Kentico. Если страница не найдена, мне нужно нажать на событие «CMSRequestEvents.End.After». Это событие получает аргументы отправителя и события. Как мне взломать аргументы событий и найти страницу, не найденную похожей информацией? Поскольку это событие запускается для всех запросов, мне нужно обработать только «страница не найдена» и зарегистрировать ее. SystemEvents.Exception.Execute запускается, когда возникает исключение, и страница не найдена не является исключением. Мы используем Kentico версии 7.

[CustomHandleError]
public partial class CMSModuleLoader
{
    private class CustomHandleErrorAttribute : CMSLoaderAttribute
    {
        /// <summary>
        /// Called automatically when the application starts
        /// </summary>
        public override void Init()
        {
            // Assign custom handlers to the appropriate events
            SystemEvents.Exception.Execute += System_Exception_Execute;
            CMSRequestEvents.End.After += Request_End_After;
        }

        private void System_Exception_Execute(object sender, SystemEventArgs e)
        {
            try
            {
                var exception = e.Exception;
                var errorloggerHelper = new ErrorLoggerHelper();
                errorloggerHelper.LogError(exception);
            }
            catch
            {
                //do nothing 
            }
        }

        private void Request_End_After(object sender, EventArgs e)
        {
            //since this gets called for each request, HANDLE only "page not found" and log

        }
    }
}

person learning...    schedule 24.03.2015    source источник


Ответы (1)


Я предполагаю, что под «нашей базой данных» вы подразумеваете базу данных, отличную от базы данных Kentico.
Поскольку Kentico уже регистрирует события «Страница не найдена», я бы предложил присоединиться к событию EventLogInfo.TYPEINFO.Events.Insert.After и выполнить фильтрацию по EventCode=="PAGENOTFOUND", как описано в документация.

Снимок экрана (v8): введите описание изображения здесь

Другой вариант - использовать настраиваемые страницы ошибок.

person rocky    schedule 24.03.2015
comment
Спасибо! Это (EventLogInfo.TYPEINFO.Events.Insert.After) то, что я искал. У нас есть страница pagenotfound на стороне cms, но я не хотел подключаться к ней через страницу PortalTemplate. - person learning...; 25.03.2015