Elmah 1.1 RC에서 jscript 어설션을 사용하여 예외 유형을 필터링하려면 어떻게 해야 합니까?

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>), 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> 하나는 무시당하고 있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top