【问题标题】:How can I use jscript assertion to filter exception types in Elmah 1.1 RC?如何使用 jscript 断言过滤 Elmah 1.1 RC 中的异常类型?
【发布时间】:2010-10-30 04:32:51
【问题描述】:

针对 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>

【问题讨论】:

    标签: javascript exception filter elmah


    【解决方案1】:

    当您有多个条件时,如您在示例中的方式(&lt;equal&gt; 然后&lt;jscript&gt;),您需要告诉 ELMAH 对它们进行 AND 或 OR。解决方案是使用&lt;and&gt;&lt;or&gt;,具体取决于您希望如何对条件进行逻辑组合。下面,我对两者进行了 OR-ed,因此条件可能适用:

    <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>
    

    当您在 &lt;test&gt; 下直接有多个条件且没有逻辑(&lt;and&gt;&lt;or&gt;)组合时,则仅使用第一个条件,这就是您的 &lt;jscript&gt; 被忽略的原因。

    【讨论】:

    • 您好,感谢您提供有关 的信息。 BaseException-filters 仍然无法正常工作。 Elmah 仍然使用上面的代码报告 HttpRequestValidationException。
    • 那是我的错。该示例缺少 元素,应包装整个 JScript 代码。
    • 太好了,现在可以正常工作了!非常感谢您对此提供的帮助。
    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2020-10-25
    • 2021-04-06
    • 2022-07-04
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多