ASP.NET MVC5 Elmah Журнал ошибок/электронная почта Контроллер для пути не найден

Вчера я настроил Elmah, чтобы он отправлял мне электронное письмо каждый раз, когда выдается необработанное исключение, которое приводит к сбою моего сайта.

Этим утром я проснулся и увидел 6 электронных писем, за исключением:

«System.Web.HttpException: контроллер для пути «/none» не найден или не реализует IController».

Они были от поискового робота Bing. Было еще 2 от поисковых роботов Google и Yahoo.

Я просмотрел свой код и проверил все свои ссылки на своем веб-сайте и не нашел никаких ошибок. Нигде я не пытаюсь направить на «нет» контроллер. Две другие ошибки были похожи, но указывают на пару других контроллеров, но они работают нормально, когда я их тестирую.

Что я делаю не так и как избавиться от этих ошибок?

Я обеспокоен тем, что они будут ранжировать мой сайт ниже в поисковых системах.

Обновление:

Наконец-то я смог воспроизвести ошибки. В своем браузере я набрал: «www.mysite.com/abcde». Пользовательская страница ошибки 404 моего сайта показала, что это хорошо. Однако Elmah сгенерировал электронное письмо, в котором говорилось

"Контроллер для пути "/abcde" не найден или не реализует IController"

Когда я набрал: «www.mysite.com/Home/abcde», появилась моя пользовательская страница с ошибкой 404. Затем Эльма отправил это электронное письмо:

«Метод открытого действия abcde не найден на контроллере MySite.Controllers.HomeController».

Это приводит меня к выводу, что по какой-то причине поисковые роботы пытаются получить доступ к URL-адресам на моем сайте, которые были удалены или никогда не существовали.

Как я могу заставить elmah не регистрировать ошибки, поступающие с URL-адресов, которых нет на моем сайте? Я не хочу получать электронное письмо каждый раз, когда посетитель или поисковый робот пытается ввести несуществующий URL-адрес.

Кроме того, есть ли способ перенаправить наиболее распространенные недействительные URL-адреса поисковых роботов, такие как «/none» и «/error_log», на мою главную домашнюю страницу?


person Peter Ringering    schedule 31.01.2016    source источник


Ответы (2)


После дополнительных исследований я решил свою проблему.

Вот шаги:

  1. Создайте класс, реализующий интерфейс IExceptionFilter. Попросите код проверить, было ли обработано исключение. Если это было, то сигнал Эльме.

    public class ElmahHandledErrorLoggerFilter : IExceptionFilter
    {
        public void OnException(ExceptionContext context)
        {
            if (context.ExceptionHandled)
                ErrorSignal.FromCurrentContext().Raise(context.Exception);
        }
    }
    
  2. Зарегистрируйте новый экземпляр ElmahHandledErrorLoggerFilter в списке GlobalFilterCollection класса FilterConfig. Примечание. Это должно быть зарегистрировано после объекта TransactionFilter.

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new TransactionFilter());
        filters.Add(new ElmahHandledErrorLoggerFilter());
    }
    
  3. В файле Globals.asax.cs добавьте обработчики событий для фильтрации исключений 404.

        protected void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
        {
            FilterError404(e);
        }
    
        protected void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e)
        {
            FilterError404(e);
        }
    
        // Dismiss 404 errors for ELMAH
        private void FilterError404(ExceptionFilterEventArgs e)
        {
            if (e.Exception.GetBaseException() is HttpException)
            {
                HttpException ex = (HttpException)e.Exception.GetBaseException();
                if (ex.GetHttpCode() == 404)
                    e.Dismiss();
            }
        }
    

    Вот оно. Теперь ошибки 404 не регистрируются и не отправляются по почте, но все остальные исключения будут записываться и отправляться по почте.

Я буду периодически использовать Xenu для сканирования моего веб-сайта на наличие неработающих ссылок.

Вы можете прочитать больше здесь, документация Elmah и Переполнение стека.

person Peter Ringering    schedule 02.02.2016

Скорее всего, это означает, что где-то на ваших страницах есть ссылка на "none" - то есть что-то, что вы считаете ссылкой только для скрипта (с обработчиком click, который отменяет навигацию по умолчанию). Исправление зависит от того, что на самом деле должна делать ссылка, но, как правило, рекомендуется, чтобы все ссылки указывали на существующие местоположения, даже если они обычно обрабатываются сценарием.

Вы можете попытаться просканировать свой сайт самостоятельно (либо с помощью базового кода, написанного с помощью HTMLAgilityPack, либо с помощью существующих инструментов сканирования сайта), чтобы проверить, есть ли ссылки, которые не указывают на правильные места.

person Alexei Levenkov    schedule 01.02.2016
comment
Хорошо спасибо. Я зарегистрировался в бесплатной службе сканирования веб-сайтов. Как только они закончат сканирование моего сайта, я опубликую результаты. - person Peter Ringering; 01.02.2016
comment
Будут ли роботы поисковых систем сканировать мою серверную область? Я настроил его так, что вы должны быть администратором, чтобы попасть в эту область на моем веб-сайте. Это единственная область, в которой есть код javascript, реагирующий на события кликов. - person Peter Ringering; 01.02.2016
comment
@PeterRingering Посмотрите журналы IIS (или любого другого сервера, который вы используете для размещения своего веб-сайта), чтобы узнать, что сканируется/не сканируется. - person Alexei Levenkov; 01.02.2016
comment
Я использую GoDaddy.com для размещения своего веб-сайта, поэтому не думаю, что смогу получить доступ к их журналам IIS. Я обновил свой вопрос результатами моего последнего исследования. Спасибо за вашу помощь! - person Peter Ringering; 02.02.2016
comment
Кроме того, я только что просканировал свой веб-сайт и не обнаружил плохих ссылок. - person Peter Ringering; 02.02.2016