如何使用jscript断言过滤Elmah 1.1 RC中的异常类型?

时间:2009-05-31 02:35:55

标签: javascript exception filter elmah

对404的第一个绑定工作,所以我正确设置了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>

1 个答案:

答案 0 :(得分:4)

当您有多个条件时,您在示例中的方式(<equal>然后<jscript>),您需要告诉ELMAH AND它们或OR它们。解决方案是使用<and><or>,具体取决于您希望在逻辑上组合条件的方式。下面,我对两者进行了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>一个条件被忽视了。