如何在MVC中挂钩调用控制器操作?

时间:2012-02-08 13:13:10

标签: .net asp.net-mvc-3 iis

在我的MVC3应用程序中,我有很多控制器和操作。有时在执行操作时会引发异常。我希望能够记录它并让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 个答案:

答案 0 :(得分:1)

您可以在 Basecontrollor 上覆盖OnException Method

这将是Controllor操作中所有异常的Catch块。只需从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
    }
}