15

ActionResult を返すアクションのポイントは何ですか?

4

3 に答える 3

20

「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 のパーツを分離し、コードを再利用可能にし、単体テストを容易にすることです。つまり、非常にクリーンなフレームワークを提供することです。

于 2008-11-14T03:49:24.480 に答える
2

これは基本クラスであるため、ViewResult や JsonResult などの任意の ActionResult サブクラスを返すことができます。通常、ViewResult をデフォルトとして返しますが、Ajax を処理して JsonResult オブジェクトを返す場合は、その動作をオーバーライドします。

これにより、Ajax をプログレッシブ エンハンスメントとして追加し、JavaScript や別のコントローラー アクションを必要とせずにアプリケーションを動作させ続けることができます。

于 2008-11-14T03:42:54.833 に答える
1

ActionResult は、さまざまな種類のコントローラー結果の基本クラスです。基本クラスを返すことにより、コントローラー アクションは、メソッドの結果 (ViewResult、RedirectToActionResult など) に応じて、さまざまな種類の結果を返すことができます。現在のコントローラ アクション。

于 2008-11-14T03:42:09.250 に答える