我最近不幸需要在ASP.NET MVC操作中找到错误的根本原因。错误结果是在操作上声明的一个操作过滤器中。然而,发现这个错误主要是纯粹的运气,并花费了更多的时间而不是合理的。将来,我如何调试ASP.NET MVC动作过滤器的问题?
特别是:
我尝试使用VS.NET调试器;但是它不会以有用的方式进入过滤器。如果我在请求之前暂停执行,服务器会在适当的时候等待调试器,但是当我然后使用Step into或者跳过它时,它会继续而不会单步执行任何过滤器(只是我的代码关闭)。如果我事先知道注册了哪些过滤器,我可能会设置一个断点,但这很难实现,特别是因为某些过滤器是第三方代码。
答案 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的开销。