ELMAH - Фильтрация 404 ошибок

Я пытаюсь настроить ELMAH для фильтрации 404 ошибок, и я сталкиваюсь с трудностями с XML-предоставленными правилами фильтра в моем файле Web.config. Я следовал учебному руководству здесь и здесь и добавил объявление под моим ... объявление, но это полностью отказавшее.

Когда я протестировал его локально, я всунул точку останова void ErrorLog_Filtering() {} из Global.asax и найденный, что System.Web.HttpException это уволено ASP.NET за 404, кажется, не имеет базовый тип System.IO.FileNotFound, а скорее это просто a System.Web.HttpException. Я протестировал это путем вызова e.Exception.GetBaseException().GetType() в конечном счете обработчик.

Затем я решил попробовать a в надеждах, что любое сообщение об исключении, соответствующее шаблону "Файл '/foo.ext', не существует", фильтровать, но который также не имеет никакого эффекта. Как последнее прибежище я попробовал , и даже который полностью игнорируется.

Я склонен думать, что существует ошибка конфигурации с ELMAH, но мне не удается видеть любого. Я пропускаю что-то очевидно очевидное?

Вот соответствующий материал от моего web.config:


  
    
      

23
задан Nathan Taylor 18 May 2010 в 02:19
поделиться

1 ответ

Это действительно была ошибка конфигурации, но не особо очевидная.

Порядок, в котором регистрируются HttpModules ELMAH, вызывает уместное беспокойство, потому что для того, чтобы ELMAH отфильтровал исключение, он должен сначала знать, какие модули будут использовать исключение. Модуль ErrorFilter HttpModule должен быть зарегистрирован последним , чтобы другие модули не обрабатывали фильтруемое исключение. Мне это кажется [отчасти] обратным, но, по крайней мере, это работает.

<configuration>
  ...
  <system.web>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
    </httpModules>
  </system.web>
  <system.webServer>
    <modules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
    </modules>
  </system.webServer>
</configuration>

Еще раз просмотрев запись ELMAH Wiki об ErrorFiltering , я обнаружил этот небольшой лакомый кусочек информации , который действительно заслуживает тега , если вы спросите меня ]. ( Правка : они выделили его жирным шрифтом с тех пор, как я впервые ответил на этот вопрос; реквизиты!)

Первым шагом является настройка дополнительного модуля под названием Elmah.ErrorFilterModule. Убедитесь, что вы добавили его после любого из модулей регистрации от ELMAH, как показано здесь с ErrorLogModule:

39
ответ дан 29 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: