#asp.net-mvc #elmah #elmah.mvc
#asp.net-mvc #elmah #elmah.mvc
Вопрос:
ELMAH генерирует исключение, подобное приведенному ниже, когда известный процесс посещает несуществующий URL-адрес на нашем веб-сайте:
System.Web.HttpException: контроллер для пути ‘/ manager/’ не найден или не реализует IController.
В то время как переход к этому несуществующему URL-адресу из браузера генерирует типичный IIS 404.
Ресурс не может быть найден. Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, его имя было изменено или временно недоступен. Пожалуйста, просмотрите следующий URL-адрес и убедитесь, что он написан правильно.
Запрошенный URL: /manager
Я знаю, что процесс доступа к этим адресам безвреден, и хочу прекратить получать эти конкретные электронные письма, генерируемые с диапазона IP-адресов. Это то, что у меня есть в web.config, но электронная почта ELMAH все еще приходит.
Фильтр URL, похоже, работает нормально.
<elmah>
<security allowRemoteAccess="false" />
<errorMail from="elmah@mydomain.com" to="elmahlog@mydomain.com" async="true" smtpServer="mail.mydomain.com" smtpPort="25" useSsl="false" />
<errorFilter>
<test>
<and>
<equal binding="HttpStatusCode" value="500" type="Int32" />
<or>
<!--TrustWave scans our website with intentional bad addresses-->
<regex binding="Context.Request.ServerVariables['REMOTE_ADDR']" pattern="64.37.231.d{1,3}" type="String" />
<!--Google looking for Digital Asset Links - well known statements the website wants to make-->
<regex binding="Context.Request.ServerVariables['URL']" pattern="/.well-known/assetlinks.json" type="String" />
<!--Apple devices searching for universal links - app-site association. we dont have an app.-->
<regex binding="Context.Request.ServerVariables['URL']" pattern="/.well-known/apple-app-site-association" type="String" />
</or>
</and>
</test>
</errorFilter>
</elmah>
Ответ №1:
Несмотря на то, что сообщение электронной почты ELMAH выглядит как ошибка 500, web.config действительно нуждался в коде ошибки 404 для работы фильтра.
<equal binding="HttpStatusCode" value="404" type="Int32" />
вместо
<equal binding="HttpStatusCode" value="500" type="Int32" />