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. أنها تظهر كنوع System.Web.HttpException، استثناء لا FileNotFound، ولكن قانون الأحوال لا يزال 404 وحتى التصفية يجب أن تتطابق، ولكن لا يبدو أن تعمل على الإطلاق.
وماذا أفعل الخطأ؟
المحلول
وجدت الجواب. يحتاج أسلوب تصفية للتحقق نتيجة للطريقة HttpException.GetHttpCode ()، بدلا من التحقق من الملكية Response.StatusCode.
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