.net 如何在MVC中钩住调用控制器动作?

.net 如何在MVC中钩住调用控制器动作?,.net,asp.net-mvc-3,iis,.net,Asp.net Mvc 3,Iis,在我的MVC3应用程序中,我有很多控制器和动作。有时在执行操作时引发异常。我希望能够记录这一点,并让异常由MVC处理 类似这样的伪代码: try { MvcInvokeControllerAction( controller, action, params ); } catch( Exception e ) { trace( "Error while invoking " + controller + "-" + action + " with " + params

在我的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\u Error()
中看到后者,而原始异常是lots

如何实现这种挂钩?

您可以覆盖BaseController

这将是控制器操作中所有异常的捕获块。把你所有的控制器都从BaseController上除掉

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
    }
}
您可以在BaseController上覆盖

这将是控制器操作中所有异常的捕获块。把你所有的控制器都从BaseController上除掉

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
    }
}

如何让异常传播?我是否只调用基本的
OnException()
?参见示例。不需要调用一个异常。MVc将自动为Controller ActionsHow中的任何错误调用OneException。我是否允许异常传播?我是否只调用基本的
OnException()
?参见示例。不需要调用一个异常。对于控制器操作中的任何错误,MVc将自动调用OneException