6

ASP.NET MVCのActionFilterを、アプリケーション内のすべてのアクション (すべてのコントローラー)に適用したいと考えています。

すべての ActionResult メソッドに適用せずにこれを行う方法はありますか?

4

3 に答える 3

10

はい、これを行うことができますが、そのままでは機能しません。私は次のことをしました:

  1. ベースコントローラークラスを作成し、すべてのコントローラーを継承させます
  2. アクション フィルター属性を作成し、FilterAttribute および IActionFilter から継承させる
  3. 新しいアクション フィルター属性でベース コントローラー クラスをデコレートします。

アクション フィルター属性のサンプルを次に示します。

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 アクション フィルターが常に実行されます。もう少し詳細が必要な場合は、完全なサンプルをブログに投稿してください。

それが役立つことを願っています!

于 2009-03-16T06:53:55.397 に答える
5

状況はどのように改善されますか...2年後、私たちは

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorElmahAttribute());
    }
于 2011-04-29T17:28:56.350 に答える
0

すべてのアクションに適用する必要はありません。すべてのコントローラーに適用できます (つまり、メソッドではなくクラスに属性を配置します)。

または、Ian が述べたように、それを基本コントローラー クラスに置き、そのコントローラーから拡張することもできます。

于 2009-03-16T07:40:55.660 に答える