すべてのアクションでASP.NET-MVCにActionFilterを適用できますか
-
19-08-2019 - |
質問
ASP.NET MVCのActionFilter を使用して、アプリケーション内のすべてのアクションに対して-すべてのコントローラーで。
すべてのActionResultメソッドに適用せずにこれを行う方法はありますか?
解決
はい、あなたはこれを行うことができますが、それは箱から出して動作する方法ではありません。私は次のことをしました:
- ベースコントローラークラスを作成し、すべてのコントローラーに継承させます
- アクションフィルター属性を作成し、FilterAttributeおよびIActionFilterから継承する
- 新しいアクションフィルター属性でベースコントローラークラスを飾ります
アクションフィルター属性のサンプルは次のとおりです。
public class SetCultureAttribute : FilterAttribute, IActionFilter
{
#region IActionFilter implementation
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//logic goes here
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//or logic goes here
}
#endregion IActionFilter implementation
}
この属性を持つ基本コントローラークラスのサンプルを次に示します。
[SetCulture]
public class ControllerBase : Controller
{
...
}
コントローラークラスがControllerBaseを継承する限り、このメソッドを使用すると、SetCultureアクションフィルターが常に実行されます。完全なサンプルがあり、このに投稿します。詳細については、私のブログでをご覧ください。
役立つことを願っています!
他のヒント
状況の改善方法... 2年後、私たちは
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorElmahAttribute());
}
すべてのアクションに適用する必要はありません。すべてのコントローラーに適用するだけです(つまり、メソッドではなくクラスに属性を設定します)。
または、Ianが述べたように、ベースコントローラークラスに配置し、そのコントローラーから拡張できます。
所属していません StackOverflow