設定:
私は、もともと Steve Sanderson のウィザード (Pro ASP.NET MVC 2 Framework) に基づいて、ASP.NET MVC ウィザードを作成しました。私のウィザードは一般的で、夢です。
ウィザードの各ステップはアクションです。
しかし、このウィザードを広範囲に使用するアプリをリリースしました。明らかに、アプリはリリース モードです。
WizardController<> クラスは、すべてのウィザードの基本クラスです。問題の解決策を提供できると思われる OnActionExecuting メソッドがあります。問題は、スタックを正しい順序でトラバースする方法、または問題は何かということです...
問題:
WizardController の奥深くにあるコードでは、次を使用します。
var stackTrace = new StackTrace();
string actionName = stackTrace.GetFrame(n).GetMethod().Name
このコードを呼び出したアクションの名前を取得します (n は、呼び出し元のアクションであることがわかっているフレームです...つまり、デバッグ モードで)。これにより、現在どのウィザードのステップ/アクションを実行しているかを確認できます。
これはデバッグ モードでは問題なく動作しますが、リリース モードではコンパイラがコードを最適化します。したがって、 n は、スタック内の正しいフレームを表している場合と表していない場合があります。
実際には、リリース モードでは、n が正しいフレームを表していないことがあります。そして、時には十分ではありません。時々私の問題です。防弾ソリューションが欲しい。
質問:
では、スタックトレースを使用する代わりにどのような方法がありますか?? OnActionExecuting メソッドを使用して、必要なアクションの名前を取得できると思います。この名前は、ウィザードのステップを識別するものだからです。
しかし、どのように?
存在するかどうかを忘れてください。どのように?それが問題です。