8

ELMAH がローカル サーバーの favico に対して 404 not found をログに記録することにすぐに気付きました。フィルターを使用してこのエラーを抑制するにはどうすればよいですか? 私はまだそれを設定することにあまり慣れていません..

4

6 に答える 6

18

elmah の公式エラー フィルタリング ページでは、この 404 ファビコン エラーを抑制する方法について説明しています。

このように、web.config で宣言的にすべての404 エラーを除外できます。ただし、ファビコンの 404 のみを抑制する方法があるかどうかはわかりません。

<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 を宣言的にフィルタリングするか、ジョエルが提案するようにファビコンを提供することを好みます。

于 2009-10-16T18:27:08.043 に答える
13

ELMAH の設定方法を学ぶのには役立ちませんが、favicon のリクエストに対する 404 を防ぐ最も簡単な方法は、favicon を提供することです...

于 2009-04-17T21:25:35.487 に答える
5

以下のコードを使用して、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>
于 2012-04-22T19:11:04.347 に答える
4

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 を呼び出す必要はありません。

ここに私のfaviconを含むelmah.axdがあり、エラーはありません:

favicon.ico のエルマ

于 2011-01-28T11:06:10.300 に答える
2

Elmahを設定するのではなく、ルートを無視します。これは私のために働きます:

routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
于 2010-02-24T15:00:54.303 に答える
1

上記のKurt Schindlerのプログラムによるソリューション(vs config)を使用していました。ただし、ErrorLog_Filtering イベント ハンドラーで非 HttpExceptions が 2 回スローされていることに気付きました。これを回避するには、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();
        }
    }
}

ここでは新しいことは何もありません。奇妙な動作が見られた場合の参考までに。

ありがとう...

于 2011-01-17T19:54:58.857 に答える