【问题标题】:Debugging ASP.NET MVC action filters调试 ASP.NET MVC 操作筛选器
【发布时间】:2013-02-11 10:47:23
【问题描述】:

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

特别是:

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

我尝试使用 VS.NET 调试器;但是它不会以有用的方式进入过滤器。如果我在请求之前暂停执行,服务器会酌情等待调试器,但是当我使用 Step into 或 step over 时,它会继续执行,而不会单步执行任何过滤器(只是我的代码已关闭)。如果我事先知道注册了哪些过滤器,我可能可以设置一个断点,但这几乎不切实际,尤其是因为某些过滤器在第三方代码中。

【问题讨论】:

  • 如果是自己的过滤器,可以设置断点调试。您可以使用Glimpse 查看针对请求执行了哪些过滤器。
  • 听起来像是一个答案,即使不是 100% 完美!
  • 这就是我选择评论的原因:)

标签: asp.net-mvc debugging


【解决方案1】:

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

如果您有一个基本控制器并让其余控制器从它继承,那就太好了,然后下面的代码将让您知道所有控制器和为任何请求调用的操作。

#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

附: - 如果您想了解更多详细信息,例如操作的处理时间或某些可插拔系统,请使用Glimpse。只需几分钟即可使其运行。这是一个很棒的工具。附带说明一下,glimpse 提供的时间并不准确,因为还包括 Glimpse 的一些开销。

【讨论】:

  • 感谢您对这个古老问题的回答 - 很高兴看到烦恼得到解决 :-)。
猜你喜欢
  • 2019-07-29
  • 2014-06-30
  • 2018-03-29
  • 1970-01-01
  • 2014-07-13
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
相关资源
最近更新 更多