2010-07-20 82 views
0

Ineed寫的錯誤處理程序助手類我的asp.net mvc的項目..asp.net的MVC錯誤處理Helper類

任何人可以給我的代碼怎麼寫,並在那裏寫這個輔助類在我機應用?

我需要使用此錯誤登錄控制器級別。 我不想使用try和catch塊爲我的控件中的每個Actionresult .. 我需要使用控制器級別?

cananybody help me out?

謝謝

+0

你到目前爲止試過了什麼?你有沒有遇到任何你可能會問到的問題? – 2010-07-21 06:17:55

回答

2

我可以建議你使用elmah。這對錯誤記錄很有用,你可以從這裏閱讀:http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

我做了什麼,我對它滿意的是以下內容。我做了一個自定義的處理錯誤屬性,它具有下面的代碼:

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
{ 

    public override void OnException(ExceptionContext context) 
    { 
     base.OnException(context); 

     var e = context.Exception; 
     if (!context.ExceptionHandled // if unhandled, will be logged anyhow 
      || ExceptionHelper.RaiseErrorSignal(e)  // prefer signaling, if possible 
      || IsFiltered(context))  // filtered? 
      return; 

     ExceptionHelper.LogException(e); 
    } 


    private static bool IsFiltered(ExceptionContext context) 
    { 
     var config = context.HttpContext.GetSection("elmah/errorFilter") 
        as ErrorFilterConfiguration; 

     if (config == null) 
      return false; 

     var testContext = new ErrorFilterModule.AssertionHelperContext(
            context.Exception, HttpContext.Current); 

     return config.Assertion.Test(testContext); 
    } 
} 

而且我有一個ExceptionHelper類與此代碼:

public static class ExceptionHelper 
{ 
    public static bool RaiseErrorSignal(Exception e) 
    { 
     var context = HttpContext.Current; 
     if (context == null) 
      return false; 
     var signal = ErrorSignal.FromContext(context); 
     if (signal == null) 
      return false; 
     signal.Raise(e, context); 
     return true; 
    } 

    public static void LogException(Exception e) 
    { 
     var context = HttpContext.Current; 
     ErrorLog.GetDefault(context).Log(new Error(e, context)); 
    } 

然後我就註解我的基本控制器類MyNamspace.HandleError和現在所有的異常都被處理和記錄下來,當出現問題時我甚至會收到一封郵件......

+1

配對,耐心使用「爲我寫的代碼」+1 – BritishDeveloper 2010-07-25 22:27:37