ELMAHで404 FavIcoエラーをブロック
-
11-09-2019 - |
質問
私はELMAHは私のローカルサーバー上のfavicoが見つかりません404を記録します箱から出して気づきました。どのように私はフィルタを介して、このエラーを抑制していますか?私はそれをを、設定とそれほど慣れていないよ、まだ..
解決
公式ELMAH エラーフィルタリングページはこの404ファビコンいくつかの方法を説明しますエラーがsupressedすることができます。
あなたはのすべてのの404エラーがそうのようにweb.configファイルで宣言的にフィルタリングすることができます。私はかかわらず、ファビコン用の404をsurpressする方法があるかどうか分からない。
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" type="Int32" />
</test>
</errorFilter>
あなたがプログラム的にそれをやってみたかった場合、あなたは公式ドキュメントで説明したようにのErrorLogやErrorEmailフィルタリングイベントでエラーを消すことができます。コードの下ビットやり過ぎですが、それはあなたが/favicon.ico要求のためのののみの404エラーをフィルタリングする方法を示します。
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if (((HttpException)e.Exception.GetBaseException()).GetHttpCode() == 404
&& ((HttpContext)e.Context).Request.Path == "/favicon.ico")
{
e.Dismiss();
}
}
私は個人的にweb.configファイルを介してすべての404エラー宣言フィルタのいずれかに好む、またはジョエルが提案するようにちょうどファビコンを提供したい。
他のヒント
...それはあなたがELMAHを構成する方法を学ぶのを助けるしませんが、ファビコンの要求のために404を防止するための最も簡単な方法は、1を提供することです。
私は以下のコードを使用して、エラーを無視する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>
しかし、それはない何をするか、と思います。
私は仕事に見つけた唯一の方法は、私のWebルートに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();
}
}
}
ここで新しい何もない、ちょうどFYIあなたはいくつかの奇妙な動作を確認するために起こる場合。
おかげで...