ASPでの使用方法NET CoreでActionFilterを使う
4205 ワード
ASP.NET Core MVCのFiltersでは、
実は ActionFilters
アクションメソッドの実行前と実行後に実行されます. AuthorizationFilters ResourceFilters ExceptionFilters
どのタイプのfilterを使うかは、どのようなビジネスを実現したいのかによって決まります.例えば、
ASP.NET Core MVCには
カスタマイズされたActionFilterを使用して、Actionメソッドの前後で多重化可能な論理を実行することができます.これはいわゆるAOPプログラミングであり、 ResultFilterAttribute ExceptionFilterAttribute ServiceFilterAttribute TypeFilterAttribute
これらのショートカット特性に加えて、最も簡単で乱暴なのは
次のコードフラグメントは、同期モードのActionFilterを作成し、
次のコードフラグメントは、非同期モードのActionFilterを作成し、
前にも述べたように、filterフィルタを異なるレベルの役割ドメインに追加できます.これらの役割ドメインには、actionレベル、controllerレベル、globalレベルが含まれています.ここでは、globalレベルにfilterを追加する方法を説明します.カスタムfilterがコンフィグサービスメソッドの
上記の方法に加えて、次のコードに示すように、
まとめると、フィルタは
翻訳リンク:
https://www.infoworld.com/art...
のいずれかのフェーズの前後でカスタムコードを実行できます.異なるタイプのfilterは
の異なるフェーズに対応しています.たとえば、ActionFilter
はActionメソッドの前後でカスタムコードを実行できます.この記事では、ASP.NET Core MVC
に組み込まれているActionFilterについて説明します.なぜ非常に役に立つのか、プログラムでどのように使用するか.Filterフィルタ
実は
ASP.NET Core MVC
には多くの内蔵filterがあり、大体次のように羅列されています.アクションメソッドの実行前と実行後に実行されます.
の開始点で実行され、主にユーザの
を取得してユーザが許可されているかどうかを検証するために使用される.authorization
以降および
以前に実行され、いくつかのキャッシュロジックを実装することができる.
のすべての例外がスナップされるので、カスタマイズされた例外処理を実装できます.どのタイプの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があります.これらのショートカット特性に加えて、最も簡単で乱暴なのは
IActionFilter
インタフェースを実現することであり、
と
の2モードを実現することもできる.同期のActionFilterの作成
次のコードフラグメントは、同期モードのActionFilterを作成し、
IActionFilter
インタフェースを継承し、OnActionExecuting
とOnActionExecuted
の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...