質問

ASP.NET MVCのActionFilter を使用して、アプリケーション内のすべてのアクションに対して-すべてのコントローラーで。

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

役に立ちましたか?

解決

はい、あなたはこれを行うことができますが、それは箱から出して動作する方法ではありません。私は次のことをしました:

  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アクションフィルターが常に実行されます。完全なサンプルがあり、このに投稿します。詳細については、私のブログでをご覧ください。

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

他のヒント

状況の改善方法... 2年後、私たちは

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorElmahAttribute());
    }

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

または、Ianが述べたように、ベースコントローラークラスに配置し、そのコントローラーから拡張できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top