Elmah 필터링이 작동하지 않습니다
문제
내 web.config에 다음과 같은 설정이 있습니다.
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
</sectionGroup>
</configSections>
<elmah>
<security allowRemoteAccess="0" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyConnHere" />
</elmah>
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
<add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
</httpModules>
</system.web>
그리고 내 Global.asax 파일의 다음은 다음과 같습니다.
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
Filter(e);
}
public void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e)
{
Filter(e);
}
private void Filter(ExceptionFilterEventArgs e)
{
var context = e.Context as HttpContext;
if (context != null && context.Response.StatusCode == 404)
e.Dismiss();
if (e.Exception.GetBaseException() is FileNotFoundException ||
e.Exception.GetBaseException() is HttpRequestValidationException)
e.Dismiss();
}
그러나 매번 Elmah는 404 예외를 기록합니다. ASP.NET MVC를 사용하고 있습니다. 그들은 filenotfound 예외가 아닌 유형 system.web.httpexception으로 표시되지만 상태 코드는 여전히 404이므로 필터가 일치해야하지만 전혀 작동하지 않는 것 같습니다.
내가 뭘 잘못하고 있죠?
해결책
답을 찾았습니다. 필터 메소드는 응답을 확인하지 않고 httpexception.gethttpcode () 메소드의 결과를 확인해야합니다.
private void Filter(ExceptionFilterEventArgs e)
{
var exception = e.Exception.GetBaseException();
var httpException = exception as HttpException;
if (httpException != null &&
httpException.GetHttpCode() == 404)
e.Dismiss();
if (exception is FileNotFoundException ||
exception is HttpRequestValidationException ||
exception is HttpException)
e.Dismiss();
}
제휴하지 않습니다 StackOverflow