2010-01-15 40 views
12

我有一個自定義的異常過濾器,我用來捕獲我寫的自定義異常,但由於某些原因,當我拋出我的異常,它沒有得到過濾器。相反,我只是得到一個錯誤,我的異常不是由用戶代碼處理的。任何人都可以提供一些建議/協助,我應該如何設置?相關代碼如下:自定義異常過濾器沒有在asp.net中被擊中MVC

// controller  
[CustomExceptionFilter] 
    public class SomeController : Controller 
    {  
     public SomeController() 
     { 

     } 
     public ActionResult Index() 
     { 
      SomeClass.SomeStaticMethod(); 
      return View(); 
     } 
    } 

這與customexception屬性

// some class (where exception is being thrown) 
public class SomeClass 
{ 
    public static void SomeStaticMethod() 
    { 
     throw new MyCustomException("Test"); 
    } 
} 

這就是類(我的測試)拋出異常控制器(我也試過直接在控制器上把它扔)。

// Custom exception filter (want this to catch all unhandled exceptions) 
public class CustomExceptionFilter : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.Exception.GetType() == typeof(MyCustomException)) 
     { 
      // do stuff 
     } 
    } 
} 

這就是自定義異常過濾器......當代碼執行和引發異常時,它永遠不會到達。相反,我得到上面提到的錯誤。我讀過的所有內容都表明這是設置這種方法的正確方法,但是當我在自定義過濾器中放置斷點時,它絕不會被擊中......

我在這裏錯過了什麼?

TIA

回答

7

一旦你處理你的錯誤,你需要讓過濾器上下文知道它已被處理。像這樣:

filterContext.ExceptionHandled = true; 

這應該在你的'// do stuff'部分。

我已經複製了你的代碼,並且過濾器變得很好。我唯一的區別是我添加了異常處理代碼並在該行添加了我的斷點。

+0

希望你仍然會繼續這個,即使它已經4天了。我剛回到這裏,並且在我的if塊中添加了你的代碼行......因爲我的OnException方法永遠不會被調用,所以它永遠不會被觸及。是否有一個標誌需要設置(可能在web.config中)或者某個地方告訴應用程序處理此過濾器中的異常?我仍然得到「拋出新的MyCustomException(」測試「);」線表明異常是由用戶代碼未處理的錯誤。 – Kyle 2010-01-20 16:24:20

+1

我不需要設置任何標誌,或添加任何東西到web.config。它只是工作,當我在調試模式下一步一步:首先拋出異常,然後打破它,然後我按下播放,它在OnException中進入我的斷點,你是否嘗試在調試模式下單步調試? – 2010-01-20 16:56:12

+0

我認爲所有的東西在同一個命名空間中,你只有一個CustomExceptionFilter和CustomException。 – 2010-01-20 17:05:17

相關問題