ASP.NET MVCのActionFilterを、アプリケーション内のすべてのアクション (すべてのコントローラー)に適用したいと考えています。
すべての ActionResult メソッドに適用せずにこれを行う方法はありますか?
ASP.NET MVCのActionFilterを、アプリケーション内のすべてのアクション (すべてのコントローラー)に適用したいと考えています。
すべての ActionResult メソッドに適用せずにこれを行う方法はありますか?
はい、これを行うことができますが、そのままでは機能しません。私は次のことをしました:
アクション フィルター属性のサンプルを次に示します。
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 が述べたように、それを基本コントローラー クラスに置き、そのコントローラーから拡張することもできます。