블록 404 Elmah의 Favico 오류
-
11-09-2019 - |
문제
상자에서 Elmah가 로컬 서버에서 Favico에 대해 찾을 수없는 404를 기록한 것을 발견했습니다. 필터를 통해이 오류를 어떻게 억제합니까? 아직 구성에 익숙하지 않습니다 ..
해결책
공식 엘마 오류 필터링 페이지 이 404 Favicon 오류가 억압 될 수있는 여러 가지 방법을 설명합니다.
필터링 할 수 있습니다 모두 404 Web.config에서 선언적으로 오류가 있습니다. 그래도 파비콘을 위해 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를 필터링하거나 Joel이 제안한 것처럼 favicon을 제공하는 것을 선호합니다.
다른 팁
Elmah를 구성하는 방법을 배우는 데 도움이되지 않지만 Favicon 요청에 대한 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>
내 웹 애플리케이션이 파비콘을 요청하는 것이 아니라 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를 호출 할 필요가 없습니다.
여기 내 favicon이있는 Elmah.axd는 오류가 없습니다.
Elmah를 구성하기보다는 경로를 무시합니다. 이것은 나를 위해 작동합니다 :
routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
위의 Kurt Schindler의 프로그래밍 방식 솔루션 (vs config)을 사용하고있었습니다. 그러나 ErrorLog_Filtering 이벤트 핸들러에서 비 HTTPExceptes가 두 번 던져지고 있음을 알았습니다. 이를 피하려면 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();
}
}
}
이상한 행동을 보게된다면 여기에 새로운 것은 없습니다.
감사...