¿Cómo puedo usar la afirmación de JScript para filtrar tipos de excepción en Elmah 1.1 RC?
-
06-09-2019 - |
Pregunta
El primer enlace contra 404 funciona, por lo que obtuve el error FilterModule configurado correctamente, pero la sección JScript no parece funcionar en absoluto. HttpRequestValidationException todavía se está enviando en el correo de informe.
<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>
Solución
Cuando tiene más de una condición, la forma en que la tiene en su ejemplo (<equal>
después <jscript>
), debe decirle a Elmah que ellos y ellos o ellos. La solución es usar <and>
o <or>
, dependiendo de cómo desee combinar lógicamente las condiciones. A continuación, he o-ed las dos para que se aplique la condición:
<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>
Cuando tiene múltiples condiciones directamente debajo de <test>
sin lógico (<and>
o <or>
) Combinación, entonces solo se usa la primera, por lo que tu <jscript>
uno estaba siendo descuidado.