Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc StackTrace.GetFrame的替代方案。。。在调用方法的控制器上查找操作 设置:_Asp.net Mvc_Stack Trace_Onactionexecuting - Fatal编程技术网

Asp.net mvc StackTrace.GetFrame的替代方案。。。在调用方法的控制器上查找操作 设置:

Asp.net mvc StackTrace.GetFrame的替代方案。。。在调用方法的控制器上查找操作 设置:,asp.net-mvc,stack-trace,onactionexecuting,Asp.net Mvc,Stack Trace,Onactionexecuting,我编写了一个ASP.NET MVC向导,它最初基于Steve Sanderson的向导(Pro ASP.NET MVC 2框架)。我的向导是通用的,是一个梦想 每个向导步骤都是一个操作 但是,我现在发布了一个广泛使用向导的应用程序。显然,该应用程序处于发布模式 WizardController类是所有向导的基类。它有一个OnActionExecuting方法,我怀疑它可以为我的问题提供解决方案。问题是如何,或者更确切地说,以正确的顺序遍历堆栈,问题是什么 问题是: 深入到WizardContro

我编写了一个ASP.NET MVC向导,它最初基于Steve Sanderson的向导(Pro ASP.NET MVC 2框架)。我的向导是通用的,是一个梦想

每个向导步骤都是一个操作

但是,我现在发布了一个广泛使用向导的应用程序。显然,该应用程序处于发布模式

WizardController类是所有向导的基类。它有一个OnActionExecuting方法,我怀疑它可以为我的问题提供解决方案。问题是如何,或者更确切地说,以正确的顺序遍历堆栈,问题是什么

问题是: 深入到WizardController中的代码使用:

var stackTrace = new StackTrace();
string actionName = stackTrace.GetFrame(n).GetMethod().Name
获取调用此代码的操作的名称(其中n是我知道的帧,是调试模式下的调用操作…)。这允许我确定正在执行的向导步骤/操作

这在调试模式下运行良好,但在发布模式下,编译器会优化我的代码。因此,n可能表示,也可能不表示堆栈中的正确帧

实际情况是,在释放模式下,有时n并不代表正确的帧。有时还不够好。有时候是我的问题。我想要一个防弹的解决方案

问题: 那么,除了使用stacktrace,还有什么替代方法呢??我怀疑我可以使用OnActionExecuting方法获取操作的名称,这正是我所需要的,因为这个名称标识了向导中的步骤

但是怎么做呢


忘记生存还是不生存。怎么用?这就是问题所在。

好吧,写这篇文章让我意识到答案正盯着我的脸

OnActionExecuting方法的ActionExecutionContext参数为我提供了操作名称所需的句柄,如下所示:

在WizardController类中,我添加了以下内容:

private string ActionName { get; set; } 
protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ActionName = filterContext.ActionDescriptor.ActionName; 
    // All the other stuff...
}
我现在可以使用ActionName属性,而不是:

stackTrace.GetFrame(n).GetMethod().Name
其中n可能在调试模式下已知,但在发布模式下肯定不知道

希望这能帮助像Narcissus一样落入反思陷阱的其他人