2016-01-31 3 views
4

Вчера я установил Elmah для отправки мне электронной почты каждый раз, когда вызывается необработанное исключение, которое приводит к сбою моего веб-сайта.ASP.NET MVC5 Elmah Error Log/Email Контроллер для пути не найден

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

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

Они были от бот-робота Bing. Еще было 2 робота Google и Yahoo.

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

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

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

Update:

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

«Контроллер для пути„/ ABCDE“не найден или не реализует IController»

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

«Общественный метод действий« abcde »не был найден на контроллере« MySite.Controllers.HomeController ».

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

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

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

ответ

1

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

Вот шаги:

  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 для сканирования веб-сайта по неработающим ссылкам.

Вы можете прочитать больше Here, Elmah Documentation и Stack Overflow.

1

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

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

+0

OK Спасибо. Я подписался на бесплатную службу сканирования сайтов. Как только они завершат сканирование моего сайта, я опубликую результаты. –

+0

Будут ли поисковые роботы сканировать мою бэкэнд-область? У меня есть настройка, где вы должны быть Администратором, чтобы попасть в эту область на моем веб-сайте. Это единственная область, в которой есть javascript-код, который реагирует на события кликов. –

+0

@PeterRingering Просмотрите журналы IIS (или любой сервер, который вы используете для размещения своего веб-сайта), чтобы узнать, что сканируется/не сканируется. –