ActionResult クラス (System.Web.Mvc)
ActionResult クラスとは、ASP.NET MVCのアクション・メソッドの戻り値として使う各種クラス(ActionResultを継承したクラス)のベースクラスである。
アクションメソッド内でActionResult(を継承したクラス)の中身を穴埋めしてやると、ASP.NET MVCのフレームワーク側でその内容に従いHTMLやJSONなどのHTTPレスポンスが生成される。
たとえばViewResultであればビューエンジン(HTMLテンプレートエンジン)を呼び出してHTMLをレンダリングしたり、FileResultであればファイルを指定するだけでフレームワーク側で適切なHTTPレスポンスヘッダを生成し簡単にダウンロードダイアログを表示したりできる。
ContentResultだけでを用いてゴリゴリ書けば20世紀のPerlで書かれたウェブアプリケーションばりのソースコードになること受けあい。困ったらContentResult。まじおすすめ。
目次
ActionResultの種類
ASP.NET MVCではActionResultクラスを継承した様々な便利クラスがあらかじめ用意されているので使うとよい。
- ContentResult - 文字列を直接HTTPレスポンスに書き込む。
- EmptyResult - 空のHTTPレスポンスを返す。
- FileResult - ファイルをダウンロードさせるためのベースクラス。
- FileContentResult - バイト配列をHTTPレスポンスに書き込む。
- FilePathResult - 指定されたファイルパスの中身をHTTPレスポンスに書き込む。
- FileStreamResult - Streamクラスの中身をHTTPレスポンスに書き込む。
- HttpUnauthorizedResult - 認証要求を送信する。
- JavaScriptResult - JavaScript(文字列)を直接HTTPレスポンスに書き込む。
- JsonResult - Objectクラスの中身を突っ込むとJSONに変換して送信する。
- RedirectResult - リダイレクトする。
- RedirectToRouteResult - 指定されたルート名およびルート値の結果を、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。
- PartialViewResult - 指定されたビューをレンダリングして、HTMLフラグメント(htmlタグやbodyタグのないAJAX差込用のHTMLパーツ)として送信する。
- ViewResult - 指定されたビューをレンダリングして送信する。通常はこれ。
ASP.NET MVC 3で追加されたActionResult。
- HttpNotFoundResult
- HttpStatusCodeResult
- RedirectResult - コンストラクタの引数が追加され、301リダイレクトか302リダイレクトかを選べるようになった。
独自ActionResult
ActionResultクラスを継承することでオレオレActionResultを作ることができる。
例:ImageResult
Image(System.Drawing)のインスタンスを突っ込んで、ImageFormart(System.Drawing.Imaging)で指定された形式で出力するActionResultの例。
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using System.Drawing;
using System.Drawing.Imaging;
public class ImageResult : ActionResult
{
public ImageResult() { }
public Image Image { get; set; }
public ImageFormat ImageFormat { get; set; }
private readonly Dictionary<ImageFormat, string> ContentTypes =
new Dictionary<ImageFormat, string>()
{
{ImageFormat.Bmp , "image/bmp"},
{ImageFormat.Gif , "image/gif"},
{ImageFormat.Icon, "image/vnd.microsoft.icon"},
{ImageFormat.Jpeg, "image/jpeg"},
{ImageFormat.Png , "image/png"},
{ImageFormat.Tiff, "image/tiff"},
{ImageFormat.Wmf , "image/wmf"},
};
public override void ExecuteResult(ControllerContext context)
{
// verify properties
if (this.Image == null)
{
throw new ArgumentNullException("Image");
}
if (this.ImageFormat == null)
{
throw new ArgumentNullException("ImageFormat");
}
// output
var res = context.HttpContext.Response;
res.Clear();
res.ContentType = this.ContentTypes[this.ImageFormat];
this.Image.Save(res.OutputStream, this.ImageFormat);
}
}