¿Cómo puedo usar la afirmación de JScript para filtrar tipos de excepción en Elmah 1.1 RC?

StackOverflow https://stackoverflow.com/questions/931130

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>
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top