2014-11-03 52 views
1

我試圖使用MVC自定義錯誤,以便只記錄意外的控制器錯誤。只有第一個MVC ErrorHandler屬性應該運行

我已經創建了一個'HandleAndLogError'屬性來執行此操作,它從HandleErrorAttribute繼承。如果異常未被方法上的其他錯誤處理程序屬性所覆蓋,我只想運行HandleAndLogError屬性。

例如:

[HandleAndLogError(View = "Error", Order = -1)] 
public class MyController : Controller 
{ 
    [HandleErrorWithoutLogging(ExceptionType = typeof(InvalidOperationException), View = "Error", Order = 0)] 
    public ActionResult SomeAction() 
    { 
     ... 
    } 
} 

當SomeAction引發一個InvalidOperationException我只想HandleErrorWithoutLogging來處理它。 雖然HandleErrorWithoutLogging運行,然後HandleAndLogError直接運行,但會發生什麼情況。

是否有一種簡單的方法使第一個錯誤處理程序阻止其他人運行?

回答

1

我想出了我出錯的地方,結果很簡單。在傳遞給處理程序的上下文中有一個ExceptionHandled標誌,該標誌在運行基本代碼時設置爲true。我只需要用一個if塊封裝我的代碼。

大家很奇怪,這是我結束了:

public class HandleErrorWithLoggingAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext filterContext) 
    { 
     if(!filterContext.ExceptionHandled) 
     { 
      base.OnException(filterContext); 

      if (filterContext.ExceptionHandled) 
      { 
       ... 
      } 
     } 
    } 
} 
相關問題