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

发布于 2025-01-03 19:35:14 字数 469 浏览 0 评论 0原文

在我的 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() 和原始代码中看到后者例外是很多。

我如何实现这样的挂钩?

In my MVC3 application I have lots of controllers and actions. Sometimes an exception is raised while executing an action. I want to be able to log that and let the exception be handled by MVC.

Something like this pseudocode:

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

What I want is to be able to catch the exception before it is first processed by MVC because sometimes MVC kicking in raises another exception and I see the latter in Application_Error() and the original exception is lots.

How do I achieve such hooking?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柠檬色的秋千 2025-01-10 19:35:14

您可以覆盖 OnException 方法 在您的Basecontrollor 上。

这将是控制器操作中所有异常的 Catch 块。 中 Exetnd 所有控制器即可

protected override void OnException(ExceptionContext filterContext)
{
}

只需从 Basecontrollor示例

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

You can override OnException Method On your Basecontrollor.

This will be a Catch block for all exceptions in Controllor Actions. just Exetnd all your Controllors from Basecontrollor

protected override void OnException(ExceptionContext filterContext)
{
}

Example

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
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文