Comment puis-je utiliser JScript Assertion pour filtrer les types d'exceptions dans Elmah 1.1 RC?
-
06-09-2019 - |
Question
La première liaison contre 404 fonctionne, j'ai donc correctement configuré la section ErrorFilTerModule, mais la section JScript ne semble pas fonctionner du tout. HttpRequestValidationException est toujours en cours d'envoi dans le courrier du rapport.
<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>
La solution
Lorsque vous avez plus d'une condition, la façon dont vous l'avez dans votre exemple (<equal>
alors <jscript>
), vous devez dire à Elmah à Elmah et à eux ou à eux. La solution consiste à utiliser <and>
ou <or>
, selon la façon dont vous souhaitez combiner logiquement les conditions. Ci-dessous, j'ai ou à Ed les deux afin que la condition puisse s'appliquer:
<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>
Lorsque vous avez plusieurs conditions directement sous <test>
sans logique (<and>
ou <or>
) combinaison alors seule la première est utilisée, c'est pourquoi <jscript>
L'un était négligé.