2009-08-03 50 views
0

ELMAH總是踢如何以編程方式進行過濾: 這裏是我的全局文件:ELMAH過濾編程工作不

/// <summary> 
    /// Handles the Filtering event of the ErrorLog control. 
    /// </summary> 
    /// <param name="sender">The source of the event.</param> 
    /// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param> 
    public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
    { 
     Filter(e); 
    } 

    /// <summary> 
    /// Handles the Filtering event of the ErrorMail control. 
    /// </summary> 
    /// <param name="sender">The source of the event.</param> 
    /// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param> 
    public void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e) 
    { 
     Filter(e); 
    } 

    /// <summary> 
    /// Filters the specified e. 
    /// </summary> 
    /// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param> 
    private void Filter(ExceptionFilterEventArgs e) 
    { 
     Exception 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 ViewStateException || 
      exception is CryptographicException || 
      exception is NodeNullException || 
      exception is SectionNullException || 
      exception is IdentifierNullException || 
      exception is AccessForbiddenException || 
      exception is HttpException) 
     { 
      e.Dismiss(); 
     } 
    } 

    /// <summary> 
    /// Handles the Error event of the Application control. 
    /// </summary> 
    /// <param name="sender">The source of the event.</param> 
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> 
    protected void Application_Error(Object sender, EventArgs e) 
    { 
     bool errorObtained = false; 
     Exception ex = null; 

     try 
     { 
      Exception rawException = Server.GetLastError(); 
      if (rawException != null) 
      { 
       errorObtained = true; 
       if (rawException.InnerException != null) 
       { 
        ex = rawException.InnerException; 
       } 
       else 
       { 
        ex = rawException; 
       } 
      } 
     } 
     catch 
     { 
     } 

     if (errorObtained && ex != null) 
     { 
      if ((HttpContext.Current != null) && (HttpContext.Current.Request != null)) 
      { 
       if (HttpContext.Current.IsCustomErrorEnabled) 
       { 
        Server.Transfer(errorPage, false); 
       } 
      } 
     } 
    } 
+0

您是否檢查過您是否通過設置斷點來調用Filter方法? – 2009-08-04 05:52:00

回答

0

我認爲你必須命名您的HttpModules爲:

<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/> 
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> 

與上面指定的確切名稱