私はすべてのコントローラアクションメソッドが適切なカスタム属性でマークされていることを主張するためにいくつかのユニットテストを書いていますが、パブリックメソッドがMVCアクションとして機能するかどうかを判断する基準は本当にわかりません。ASP.NET MVC:アクションのコントローラのメソッドの基準?
基準は戻り値の型(ActionResult
または派生語である必要があります)である可能性があります。これは本当ですか?静的メソッドはどうですか?
私はすべてのコントローラアクションメソッドが適切なカスタム属性でマークされていることを主張するためにいくつかのユニットテストを書いていますが、パブリックメソッドがMVCアクションとして機能するかどうかを判断する基準は本当にわかりません。ASP.NET MVC:アクションのコントローラのメソッドの基準?
基準は戻り値の型(ActionResult
または派生語である必要があります)である可能性があります。これは本当ですか?静的メソッドはどうですか?
が、それは次の基準を満たしている必要があります:
public
なくstatic
.ToString()
およびファミリを除外するために、System.Web.Mvc.Controller
または他の基本クラスで定義してはいけません。一般的なメソッドは例外をスローしますが、なんらかの理由でそれらはare
アクションとみなされます。返品タイプについては、必ず返品することができるので、必ずActionResult
である必要はありません。テキストデータの場合はです。
私はコントローラー内のすべてのパブリックメソッドをアクションとして扱います。たとえそれが文字列を返したとしてもです。アクション考慮すべき方法については
アパートsauliusで述べたものから試していません。) – UpTheCreek
コントローラー上のアクションの真のリストを決定するのは難しい問題です。唯一正しい答えは、それが「依存する」ことです!サウリウスが与えたリストは、あなたがデフォルトのControllerActionInvokerを使っているならば、かなり正しいです。もちろん、ほとんどの人が使っています。
ロジックの重複を避けたい場合は、ControllerActionInvoker自体を使用してアクションのリストを取得し、それが返すリストの内容を確認することをお勧めします。
GetControllerDescriptor()メソッドを呼び出せるように、ControllerActionInvokerから派生したクラスを作成する必要があります。そのメソッドの戻り値はControllerDescriptorであり、これはコントローラーの抽象記述子です。 GetCanonicalActions()を呼び出すと、ActionDescriptorsのリストを返します。それらの項目のそれぞれは、典型的なものと動作方法を表しています。そのコントローラーを持っているControllerContextインスタンスを作成します
あなたのコントローラに設定されたインスタンス
結果を確認したら、完了です!
もちろん、私はこれのいずれかが、理論的には、それすべての作品:)
三点目は、私が探していたものです:私はしませんでしたDispose()などのメソッドで何をすべきかを知っている。ありがとう –
アクションメソッドに[NonAction]属性が適用されていると非常に扱いにくいことに注意してください。アクションメソッドであると思われるパブリックメソッドは、デフォルトの動作をオーバーライドする属性を持つことができます。 – Eilon