调试ASP.NET MVC操作过滤器

时间:2013-02-11 10:47:24

标签: asp.net-mvc debugging

我最近不幸需要在ASP.NET MVC操作中找到错误的根本原因。错误结果是在操作上声明的一个操作过滤器中。然而,发现这个错误主要是纯粹的运气,并花费了更多的时间而不是合理的。将来,我如何调试ASP.NET MVC动作过滤器的问题?

特别是:

  • 如何找出针对特定请求以及按哪种顺序执行的过滤器?
  • 我可以单步执行这些过滤器吗?
  • 我是否至少可以在每个过滤器之间执行一些钩子以帮助找到根本原因(例如,通过跟踪某些状态)?
  • 当过滤器中止请求或导致异常时,是否有某些事件可以挂钩?

我尝试使用VS.NET调试器;但是它不会以有用的方式进入过滤器。如果我在请求之前暂停执行,服务器会在适当的时候等待调试器,但是当我然后使用Step into或者跳过它时,它会继续而不会单步执行任何过滤器(只是我的代码关闭)。如果我事先知道注册了哪些过滤器,我可能会设置一个断点,但这很难实现,特别是因为某些过滤器是第三方代码。

1 个答案:

答案 0 :(得分:4)

以下代码将按照调用它们的顺序编写控制器和操作的名称。我希望它能帮助别人,因为它帮助了我很多。

如果你有一个基本控制器并让其余的控制器继承它,那将是很棒的,然后下面的代码将告诉你所有控制器和任何请求的动作。

#if DEBUG 
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                 string controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
                 string action = filterContext.ActionDescriptor.ActionName;

                 Debug.WriteLine("Controller-" + controller + ", Action-" + action);
            }
#endif

P.S。 - 如果您需要更多详细信息,例如操作的处理时间或某些可插拔系统,请使用Glimpse。它只需几分钟就可以运行。这是一个很棒的工具。另外,瞥见提供的时间不准确,因为还有一些Glimpse的开销。