ASPでの使用方法NET CoreでActionFilterを使う

4205 ワード

ASP.NET Core MVCのFiltersでは、 のいずれかのフェーズの前後でカスタムコードを実行できます.異なるタイプのfilterは の異なるフェーズに対応しています.たとえば、ActionFilterはActionメソッドの前後でカスタムコードを実行できます.この記事では、ASP.NET Core MVCに組み込まれているActionFilterについて説明します.なぜ非常に役に立つのか、プログラムでどのように使用するか.

Filterフィルタ


実はASP.NET Core MVCには多くの内蔵filterがあり、大体次のように羅列されています.
  • ActionFilters

  • アクションメソッドの実行前と実行後に実行されます.
  • AuthorizationFilters
  • の開始点で実行され、主にユーザの を取得してユーザが許可されているかどうかを検証するために使用される.
  • ResourceFilters
  • authorization以降および 以前に実行され、いくつかのキャッシュロジックを実装することができる.
  • ExceptionFilters
  • のすべての例外がスナップされるので、カスタマイズされた例外処理を実装できます.
    どのタイプのfilterを使うかは、どのようなビジネスを実現したいのかによって決まります.例えば、 requestをしたい場合は、pipelineパイプラインを早期に終了して結果を返すには、ResourceFiltersハを使うことができますか.もう一つの例を挙げて、Actionのパラメータを修正し、Actionの結果を修正したい場合は、ActionFilterが最適です.
    ASP.NET Core MVCにはActionFilterAttributeという特性があり、以下のインタフェース IActionFilter, IAsyncActionFilter, IResultFilter, IAsyncResultFilter, IOrderedFilterを実現し、Actionレベル、Controlle rレベル、グローバルレベルなどの異なるレベルのFilterを実現することができます.

    カスタムActionFilterの作成


    カスタマイズされたActionFilterを使用して、Actionメソッドの前後で多重化可能な論理を実行することができます.これはいわゆるAOPプログラミングであり、ActionFilterAttributeのほかにもいくつかのFilterにも似たようなAttributeがあります.
  • ResultFilterAttribute
  • ExceptionFilterAttribute
  • ServiceFilterAttribute
  • TypeFilterAttribute

  • これらのショートカット特性に加えて、最も簡単で乱暴なのはIActionFilterインタフェースを実現することであり、 の2モードを実現することもできる.

    同期のActionFilterの作成


    次のコードフラグメントは、同期モードのActionFilterを作成し、IActionFilterインタフェースを継承し、OnActionExecutingOnActionExecutedの2つの方法を実装する方法を示している.
    
        public class SimpleActionFilter : IActionFilter
        {
            public void OnActionExecuting(ActionExecutingContext context)
            {
                //this method will be executed before execution of an action method 
            }
            public void OnActionExecuted(ActionExecutedContext context)
            {
                //this method will be executed after an action method has executed 
            }
        }
    

    非同期モードのActionFilterの作成


    次のコードフラグメントは、非同期モードのActionFilterを作成し、IAsyncActionFilter インタフェースを継承し、そのOnActionExecutionAsyncメソッドを実装する方法を示している.
    
        public class SimpleAsyncActionFilter : IAsyncActionFilter
        {
            public async Task OnActionExecutionAsync(ActionExecutingContext context,
              ActionExecutionDelegate next)
            {
                //code written here will be executed before execution of an action method 
                await next();
                //code written here will be executed after execution of an action method 
            }
        }
    

    ActionFilterの構成


    前にも述べたように、filterフィルタを異なるレベルの役割ドメインに追加できます.これらの役割ドメインには、actionレベル、controllerレベル、globalレベルが含まれています.ここでは、globalレベルにfilterを追加する方法を説明します.カスタムfilterがコンフィグサービスメソッドのfilter にどのように追加されているかをよく見てみましょう.次のコードに示します.
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc(options =>
                {
                    options.Filters.Add(new SimpleAsyncActionFilter());
                }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            }
    

    上記の方法に加えて、次のコードに示すように、typeofでoptionsに追加することもできます.
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc(options =>
                {
                    options.Filters.Add(typeof(SimpleAsyncActionFilter));
                }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            }
    

    まとめると、フィルタは のいずれかの点の前後でカスタムコードを実行することができ、ActionFilterにはHttpリクエストパイプでフィルタの実行順序を指定できる非常に大きな新しい改善があります.より多くのfilterの高度な特性については、後述の記事で皆さんと共有します.
    翻訳リンク:
    https://www.infoworld.com/art...