针对 404 的第一个绑定(bind)有效,因此我正确设置了 ErrorFilterModule,但 jscript 部分似乎根本不起作用。 HttpRequestValidationException 仍在报告邮件中发送。
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<jscript>
<![CDATA[
// @assembly mscorlib
// @assembly System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// @import System.IO
// @import System.Web
HttpStatusCode == 404
|| BaseException instanceof FileNotFoundException
|| BaseException instanceof HttpRequestValidationException
|| BaseException instanceof HttpException
/* Using RegExp below (see http://msdn.microsoft.com/en-us/library/h6e2eb7w.aspx) */
|| Context.Request.UserAgent.match(/crawler/i)
|| Context.Request.ServerVariables['REMOTE_ADDR'] == '127.0.0.1' // IPv4 only
]]>
</jscript>
</test>
</errorFilter>
最佳答案
当您有多个条件时,就像您的示例中那样( <equal>
然后 <jscript>
),您需要告诉 ELMAH 与它们或或它们。解决方案是使用 <and>
或<or>
,取决于您想要如何逻辑地组合条件。下面,我对两者进行了“或”运算,因此任一条件都适用:
<errorFilter>
<test>
<or>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<jscript>
<expression><![CDATA[
// @assembly mscorlib
// @assembly System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// @import System.IO
// @import System.Web
HttpStatusCode == 404
|| BaseException instanceof FileNotFoundException
|| BaseException instanceof HttpRequestValidationException
|| BaseException instanceof HttpException
/* Using RegExp below (see http://msdn.microsoft.com/en-us/library/h6e2eb7w.aspx) */
|| Context.Request.UserAgent.match(/crawler/i)
|| Context.Request.ServerVariables['REMOTE_ADDR'] == '127.0.0.1' // IPv4 only
]]></expression>
</jscript>
</or>
</test>
</errorFilter>
当您在 <test>
下有多个条件时如果没有逻辑( <and>
或 <or>
)组合,则仅使用第一个组合,这就是为什么您的 <jscript>
其中一个被忽视了。
关于javascript - 如何使用 jscript 断言来过滤 Elmah 1.1 RC 中的异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/931130/