ActionResult を返すアクションのポイントは何ですか?
3 に答える
「ActionResult が行っていることをそのまま実行する」(つまり、Response.Redirect を直接使用するか、Response OutputStream を介して View を直接レンダリングしようとする) 代わりに ActionResult を返すと、1 つの非常に優れた利点が得られます。特に、単体テストは非常に簡単です。通常、MVC プロジェクトの単体テストに Web サーバーは必要ないためです。
補遺:リダイレクトの例として:
もしあなたがそうするなら
return Redirect(newUrl);
コントローラーで、単体テストができるようになりました
- 戻り値のタイプが「RedirectResult」であることを確認します
- RedirectResult にキャストした後、result.Url をチェックして、リダイレクト先の URL を確認します。
- IIS をスピンアップしたり、Response.Redirect 呼び出しを「巧妙に」インターセプトしようとしたりする必要はありません。
- 一日の終わりに、RedirectResult は ExecuteResult 関数で Response.Redirect を呼び出しますが、Controller Unit Test はその前に位置します。
補遺 2:私がそれに取り組んでいる間、ここに Custom ActionResult の例があります:
http://www.stum.de/2008/10/22/permanentredirectresult/
これは、彼らが「黒魔術」ではないことを示すためです。それらは実際には非常に単純です。Controller は Action Result を返し、MVC ランタイムは最終的にその上で ExecuteResult 関数を呼び出し、ActionResult とやり取りできる ControllerContext を渡します。ここでも要点は、MVC のパーツを分離し、コードを再利用可能にし、単体テストを容易にすることです。つまり、非常にクリーンなフレームワークを提供することです。
これは基本クラスであるため、ViewResult や JsonResult などの任意の ActionResult サブクラスを返すことができます。通常、ViewResult をデフォルトとして返しますが、Ajax を処理して JsonResult オブジェクトを返す場合は、その動作をオーバーライドします。
これにより、Ajax をプログレッシブ エンハンスメントとして追加し、JavaScript や別のコントローラー アクションを必要とせずにアプリケーションを動作させ続けることができます。
ActionResult は、さまざまな種類のコントローラー結果の基本クラスです。基本クラスを返すことにより、コントローラー アクションは、メソッドの結果 (ViewResult、RedirectToActionResult など) に応じて、さまざまな種類の結果を返すことができます。現在のコントローラ アクション。