ASP.NET MVC5 現在のコントローラーとアクションを取得する方法

  • 2018.12.12
  • C#
ASP.NET MVC5 現在のコントローラーとアクションを取得する方法

リクエストを受けたコントローラーとアクションを取得したい

ASP.NET MVC でリクエストを受けたコントローラー名とアクション名を取得する方法をまとめます。

RouteData から取り出す

RouteData インスタンスからルーティングに関する情報を取得できます。RouteData.Values がディクショナリになっていて、この中にルーティングに関する情報が入っています。

controlleraction のキーで、リクエストを受けたコントローラー名とアクション名が取得できます。

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();
}

以上。

C#カテゴリの最新記事