リクエストを受けたコントローラーとアクションを取得したい
ASP.NET MVC でリクエストを受けたコントローラー名とアクション名を取得する方法をまとめます。
RouteData から取り出す
RouteData
インスタンスからルーティングに関する情報を取得できます。RouteData.Values
がディクショナリになっていて、この中にルーティングに関する情報が入っています。
controller
と action
のキーで、リクエストを受けたコントローラー名とアクション名が取得できます。
public class HomeController : Controller
{
public ActionResult Index()
{
// コントローラー名: "Home"
var controllerName = this.RouteData.Values["controller"].ToString();
// アクション名: "Index"
var actionName = this.RouteData.Values["action"].ToString();
return View();
}
}
コンストラクタで RouteData が NULL になる
コントローラークラスのコンストラクタ内で RouteData
を参照しようとすると NULL参照エラーが発生します。コンストラクタ内ではルーティング情報が初期化されていないためです。
アクションが実行される前に参照したい場合は OnActionExecuting
イベントで実行しましょう。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
// コントローラー名
var controllerName = this.RouteData.Values["controller"].ToString();
// アクション名
var actionName = this.RouteData.Values["action"].ToString();
}
以上。
コメントを書く