2012-08-09 37 views

回答

5

你並不需要從一個自定義的基本控制器類,以便繼承讓所有的控制器以相同的方式處理異常。你可以用ActionFilter來完成。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
    AllowMultiple = true, Inherited = true)] 
public class CustomHandleErrorAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext context) 
    { 
     // do custom exception handling here 
     // to return View("Error"), you can just do this: 
     context.Result = new ViewResult { ViewName = "Error" }; 
    } 
} 

您可以在圖書館這個Global.asax中應用此所有控制器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    //filters.Add(new HandleErrorAttribute()); // default MVC setting 
    filters.Add(new CustomHandleErrorAttribute()); 
} 
+1

謝謝你們的答案,它的工作:)。輝煌。一個問題,我怎樣才能從OnException中顯示我的erorr視圖頁面?我不能再打電話查看(「錯誤」),因爲我不在控制器 – Baconbeastnz 2012-08-10 01:22:02

+0

@baconbeastnz我可以建議你問這是另一個問題。我對於一個很好奇的回答 – rossipedia 2012-08-10 01:29:14

+0

@Baconbeastnz和@Bryan Ross,我已經更新了我的答案。幾乎任何你可以從控制器上做的事情,你都可以從一個動作過濾器中做到,你只需要做一點不同的事情。 'return View(「Error」)'只是構建一個'ViewResult'對象的'System.Web.Mvc.Controller'方法。我建議你下載MVC源代碼並看看它。你總是可以用它作爲參考來找出如何做這樣的事情。 – danludwig 2012-08-10 12:54:44