Come posso usare l'asserzione JScript per filtrare i tipi di eccezioni in Elmah 1.1 RC?
-
06-09-2019 - |
Domanda
Il primo legame contro 404 funziona, quindi ho ottenuto l'errorefiltermodule impostato correttamente, ma la sezione JScript non sembra funzionare affatto. HttPrequestValidationException viene ancora invio nella posta del rapporto.
<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>
Soluzione
Quando hai più di una condizione, il modo in cui l'hai nel tuo esempio (<equal>
poi <jscript>
), devi dire a Elmah di o loro o loro. La soluzione è usare <and>
o <or>
, a seconda di come si desidera combinare logicamente le condizioni. Di seguito, ho o-ed i due, quindi o la condizione può applicarsi:
<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>
Quando hai più condizioni direttamente sotto <test>
senza logico (<and>
o <or>
) combinazione quindi viene utilizzata solo la prima, motivo per cui il tuo <jscript>
Uno veniva trascurato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow