Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9749

ASP.NET Core で全アクション共通で実行するロジックを実行する

$
0
0

ASP.NET Core で全アクション共通で実行するロジックを実行する

例えば _Layout.cshtml内で本日のドル円レートを表示するとして、全てのコントローラの、全てのアクションに ViewDataへの代入を書いて回るのは流石にエレファント. そういう場合はどうすればいいかという話です.

プロジェクトに Filtersフォルダを掘って、MyFilter.csを作ります. 以下のように IActionFilterを継承したクラスを作ります. 非同期の場合は IAsyncActionFilterを継承します. OnActionExecutingはアクション実行前、OnActionExecutedはアクション実行後に発火します. context.ControllerControllerにキャストすると ViewDataにアクセスできます.

usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.AspNetCore.Mvc.Filters;namespaceWebApplication1.Filters{publicclassMyFilter:IActionFilter{publicvoidOnActionExecuting(ActionExecutingContextcontext){}publicvoidOnActionExecuted(ActionExecutedContextcontext){varc=context.ControllerasController;c.ViewData["foo"]="bar";}}}

このフィルタが使われるようにするため、Startup.csを開き、ConfigureServicesメソッドの中の AddControllersWithViewsを以下のように書き換えます.

services.AddControllersWithViews(options=>{options.Filters.Add(typeof(MyFilter));});

Viewing all articles
Browse latest Browse all 9749

Trending Articles