1. ホーム
  2. asp.net-mvc

ASP.Net MVCでグローバルフィルタを選択的に無効にする方法

2023-09-07 15:39:42

質問

NHibernate セッションを開いたり閉じたりするすべてのコントローラアクションに対してグローバルフィルタを設定しました。これらのアクションの95%は何らかのデータベースアクセスを必要としますが、5%は必要ありません。これらの 5% のために、このグローバルフィルターを無効にする簡単な方法はありますか。私は他の方法で行って、データベースを必要とするアクションだけを飾ることができますが、それははるかに多くの仕事でしょう。

どのように解決するのですか?

マーカー属性を書けばよいでしょう。

public class SkipMyGlobalActionFilterAttribute : Attribute
{
}

で、グローバルアクションフィルタで、アクションにこのマーカーがあるかどうかをテストします。

public class MyGlobalActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(SkipMyGlobalActionFilterAttribute), false).Any())
        {
            return;
        }

        // here do whatever you were intending to do
    }
}

で、あるアクションをグローバルフィルタから除外したい場合は、単にmarker属性で装飾するだけです。

[SkipMyGlobalActionFilter]
public ActionResult Index()
{
    return View();
}