2017-12-17 3 views
0

入力モデルのパラメータを検証するASP.NET Core Webアプリケーションのフィルタ属性を作成しています。いくつかの入力パラメータとSQL DBの別の値を比較する必要があります。フィルターの内部でDB接続を開くのがよい方法ですか?フィルタ属性内でデータベースを操作する

+0

downvoteのための明確な理由がありません –

答えて

1

フィルタ属性は、複数のアクションメソッドやコントローラにわたってクロスカッティングの問題をキャプチャするのに適しています。これが当てはまる場合は、フィルタ属性を使用するのが良い方法です。

実際、フィルタは、アクションメソッドを呼び出すステップとまったく同じように、要求処理パイプラインのもう1つのステップです。したがって、基本的には、フィルタやアクションメソッドで検証を実行するかどうかに違いはありません。

配慮のカップル:

  • 非同期フィルタを実装します。このようにして、DB操作のためにawaitを実行し、要求スレッドをブロックしないようにすることができます。繰り返しますが、まさにこの理由のためにasyncアクションを実装するでしょう。
  • DBにアクセスするために使用する技術は、接続プーリングを使用していることを確認してください。そのため、実際にはすべての要求に対してデータベース接続を開くのではなく、プールからの準備接続を使用します。

Microsoft Docs on ASP.NET Core filters

public class SampleAsyncActionFilter : IAsyncActionFilter 
{ 
    public async Task OnActionExecutionAsync(
     ActionExecutingContext context, 
     ActionExecutionDelegate next) 
    { 
     // do something before the action executes 
     var resultContext = await next(); 
     // do something after the action executes; resultContext.Result will be set 
    } 
} 

から引用非同期フィルタの例、関連項目この回答にリンクします。https://stackoverflow.com/a/40718992/4544845