Как я могу использовать утверждение JScript для фильтрации типов исключений в Elmah 1.1 RC?

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

Вопрос

Первое привязка против 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>
Это было полезно?

Решение

Когда у вас есть более одного условия, то, как у вас есть в вашем примере (<equal> тогда <jscript>), вам нужно сказать Эльме либо ни к ним, либо к ним. Решение состоит в том, чтобы использовать <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> один пренебрегал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top