gpt4 book ai didi

asp.net - ELMAH - 过滤 404 错误

转载 作者:行者123 更新时间:2023-12-02 05:48:21 24 4
gpt4 key购买 nike

我正在尝试配置 ELMAH 来过滤 404 错误,但在使用 Web.config 文件中 XML 提供的过滤规则时遇到了困难。我按照教程here进行操作和 here并添加了 <is-type binding="BaseException" type="System.IO.FileNotFoundException" />我的声明<test><or>...声明,但完全失败了。

当我在本地测试它时,我在 void ErrorLog_Filtering() {} 中设置了一个断点Global.asax 并发现System.Web.HttpException被 ASP.NET 触发的 404 似乎没有基本类型 System.IO.FileNotFound ,而是简单的 System.Web.HttpException 。我通过调用 e.Exception.GetBaseException().GetType() 对此进行了测试在事件处理程序中。

接下来我决定尝试 <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" />希望任何与模式“文件'/foo.ext'不存在”匹配的异常消息都会被过滤,但这也没有效果。作为最后的手段,我尝试了 <is-type binding="BaseException" type="System.Exception" /> ,甚至这一点也被完全忽视。

我倾向于认为 ELMAH 存在配置错误,但我没有发现任何错误。我是否遗漏了一些明显的东西?

这是我的 web.config 中的相关内容:

<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
</configSections>
<elmah>
<errorFilter>
<test>
<or>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" />
</or>
</test>
</errorFilter>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/logs/elmah" />
</elmah>
<system.web>
<httpModules>
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
</modules>
</system.webServer>
</configuration>

最佳答案

这确实是一个配置错误,只是不是特别明显。

ELMAH HttpModule 的注册顺序是一个相关问题,因为为了让 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 entry on ErrorFiltering 后我再次发现了这个小信息 ,如果你问我的话,它确实值得一个 标签 。 (编辑:自从我第一次回答这个问题以来,他们就把它加粗了; Prop !)

The first step is to configure an additional module called Elmah.ErrorFilterModule. Make sure you add it after any of the logging modules from ELMAH, as shown here with ErrorLogModule:

关于asp.net - ELMAH - 过滤 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2854196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com