2012-02-08 73 views
1

在我的MVC3应用程序中,我有很多控制器和操作。有时执行某个操作时会引发异常。我希望能够记录它,并让MVC处理异常。如何在MVC中调用控制器操作?

事情是这样的伪代码:

try { 
    MvcInvokeControllerAction(controller, action, params); 
} catch(Exception e) { 
    trace("Error while invoking " + controller + "-" + 
     action + " with " + params + " details: " + getDetails(e)); 
    throw; 
} 

我要的是能够赶上异常之前,首先通过MVC处理,因为有时MVC踢引发了另一个异常,我看后者Application_Error()和原来的例外很多。

我该如何实现这种挂钩?

回答

1

您可以覆盖OnException Method在您的Basecontrollor

这将是Controllor操作中所有异常的Catch块。只是Exetnd所有Controllors从Basecontrollor

protected override void OnException(ExceptionContext filterContext) 
{ 
} 

public class BaseController : Controller 
{ 

    protected override void OnException(ExceptionContext filterContext) 
    { 
     base.OnException(filterContext); 
     // Handle error here 
    } 
} 


public class TestController : BaseController 
{ 
    public ActionResult Index() 
    { 
     // If any exceptions then will be caught by 
     // BaseController OnException method 
    } 
} 
+0

如何让异常传播?我只是调用基础'OnException()'? – sharptooth 2012-02-08 13:24:36

+0

查看示例。无需调用OnException。 MVC会自动调用OnException来控制Controllor操作中的任何错误 – swapneel 2012-02-08 13:26:56

相关问题