2012-11-06 55 views
0

在每一個動作,我寫:如何爲MVC3網站編寫LogExceptionAttribute?

public ActionResult Foo() 
{ 
    try 
    { 
     // Do something 
    } 
    catch(Exception ex) 
    { 
     Logger.Error("Foo()", ex); 
    } 
    ... 
} 

我知道MVC3有能力在Global.asax中爲「RegisterGlobalFilters」,所以我想寫一個自定義LogExceptionAttribute。這將:

  1. 日誌信息,其操作原因什麼異常。打電話給我的記錄器API:

    Logger.Error(字符串actionName,異常前)

  2. 再次拋出異常。因此web.config中的CustomError將顯示用戶錯誤頁面。

如何實施?

回答

1

試試這個

public class HandleErrorHmAttribute : HandleErrorAttribute 
     { 
      public override void OnException(ExceptionContext context) 
      { 
       base.OnException(context); 
       new WebRequestErrorEventMvc("An unhandled exception has occurred.", this, 103005, context.Exception).Raise(); 
      } 
     } 

     public class WebRequestErrorEventMvc : WebRequestErrorEvent 
     { 
      public WebRequestErrorEventMvc(string message, object eventSource, int eventCode, Exception exception) : base(message, eventSource, eventCode, exception) { } 
      public WebRequestErrorEventMvc(string message, object eventSource, int eventCode, int eventDetailCode, Exception exception) : base(message, eventSource, eventCode, eventDetailCode, exception) { } 
     }