设置:
我编写了一个 ASP.NET MVC 向导,最初基于 Steve Sanderson 的向导(Pro ASP.NET MVC 2 Framework)。我的巫师是普通的,是一个梦想。
每个向导步骤都是一个动作。
但是,我现在发布了一个广泛使用该向导的应用程序。显然,该应用程序处于发布模式。
WizardController<> 类是我所有向导的基类。它有一个 OnActionExecuting 方法,我怀疑它可以为我的问题提供解决方案。问题是如何,或者更确切地说,以正确的顺序遍历堆栈,问题是什么......
问题:
位于 WizardController 深处的代码使用:
var stackTrace = new StackTrace();
string actionName = stackTrace.GetFrame(n).GetMethod().Name
获取调用此代码的操作的名称(其中 n 是我知道调用操作的框架......在调试模式下)。这使我可以确定我在哪个向导步骤/操作上。
这在调试模式下工作正常,但在发布模式下,编译器会优化我的代码。所以 n 可能代表我的堆栈中的正确帧,也可能不代表。
现实情况是,在发布模式下,有时 n 并不代表正确的帧。有时还不够好。有时是我的问题。我想要一个防弹解决方案。
问题:
那么使用堆栈跟踪的替代方法是什么?我怀疑我可以使用我的 OnActionExecuting 方法来获取操作的名称,这是我需要的,因为这个名称是我向导中的步骤的标识。
但是怎么做?
忘记存在或不存在。如何?就是那个问题。