阻断ELMAH 404 FavIco错误
-
11-09-2019 - |
题
我注意到的是,ELMAH记录404没有找到我的本地服务器上favico盒子。如何通过滤波器抑制这个错误?我不太熟悉构式它尚未..
解决方案
在正式ELMAH 错误过滤页面解释了许多方面,这404图标误差可以supressed。
您可以在web.config中筛选出的所有的404错误声明,像这样。我不能肯定有只surpress为一个图标404虽然一种方式。
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" type="Int32" />
</test>
</errorFilter>
如果你想以编程方式做到这一点,你可以驳回作为官方的文档解释了错误日志或ErrorEmail过滤事件的错误。下面的代码是有点矫枉过正,但它演示了如何筛选出的只有的404错误的/favicon.ico请求。
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if (((HttpException)e.Exception.GetBaseException()).GetHttpCode() == 404
&& ((HttpContext)e.Context).Request.Path == "/favicon.ico")
{
e.Dismiss();
}
}
我个人更喜欢或者过滤器的所有404声明通过在web.config,或者仅仅提供一个图标等乔尔暗示。
其他提示
它不会帮助你学习如何配置ELMAH,但最简单的方法,以防止404请求一个图标是提供一个...
我是能够得到ELMAH通过使用以下代码来忽略该错误。你可能添加你要忽略以及任何其他路径。从技术上讲,这些可以是单独的测试,但在关闭的机会,我想忽略那些有关我的应用程序未来的其他404错误,我想我会留下这些组合在一起,因为它们不依赖于我的应用程序和任何只在这里从我的错误日志记录除去杂波。
<errorFilter>
<test>
<or>
<and>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<equal binding="Context.Request.Path" value="/favicon.ico" type="string" />
</and>
<and>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<equal binding="Context.Request.Path" value="/robots.txt" type="string" />
</and>
</or>
</test>
</errorFilter>
当然,如果你担心这个弄乱你的web.config你总是可以拆分过滤掉到一个专用的文件。
<elmah>
<security allowRemoteAccess="1" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" />
<errorFilter configSource="elmahFilters.config" />
</elmah>
这不是我的Web应用程序请求图标,那就是,当我浏览到elmah.axd页面,浏览器请求一个图标。
据推测,这应该工作:
<elmah>
<errorFilter>
<test>
<and>
<equal binding="HttpStatusCode"
value="404" type="Int32" />
<regex binding="Context.Request.ServerVariables['URL']"
pattern="/favicon\.ico(\z|\?)" />
</and>
</test>
</errorFilter>
</elmah>
但你猜怎么着,它没有。
我发现的唯一途径是将favicon.ico的添加到我的网站根目录。这不是我的网站,它是只为elmah.axd页面。不需要调用route.IgnoreRoute。
这里的elmah.axd与我的图标,并没有错误:
我只是忽略路由,而不是配置ELMAH。这对我的作品:
routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
我是使用上述(VS配置)库尔特辛德勒的编程解决方案;然而,我注意到,非HttpExceptions都在ErrorLog_Filtering事件处理程序得到抛出的两倍。为了避免这种情况,你一定要做的GetBaseException方法的类型检查。这里的片段
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if (e.Exception.GetBaseException() is HttpException)
{
if (((HttpException)e.Exception.GetBaseException()).GetHttpCode() == 404
&& ((HttpContext)e.Context).Request.Path == "/favicon.ico")
{
e.Dismiss();
}
}
}
这里没有什么新,只是一个供参考,如果你碰巧看到一些奇怪的行为。
...谢谢