グローバルアクションフィルターを作成できますか?このようなもの:
public class PerformanceTestFilter : IActionFilter
{
private Stopwatch stopWatch = new Stopwatch();
public void OnActionExecuting(ActionExecutingContext filterContext)
{
stopWatch.Reset();
stopWatch.Start();
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
stopWatch.Stop();
var executionTime = stopWatch.ElapsedMilliseconds;
// Do something with the executionTime
}
}
GlobalFilters
次に、それを`Application_Start()'でコレクションに追加します。
GlobalFilters.Filters.Add(new PerformanceTestFilter());
テスト対象のコントローラーの詳細は、filterContext
パラメーターから取得できます。
アップデート
コレクションにフィルターを直接追加すると、GlobalFilters
すべてのアクションに対してフィルターの単一のインスタンスが作成されます。もちろん、これは同時リクエストのタイミングには機能しません。アクションごとに新しいインスタンスを作成するには、フィルタープロバイダーを作成します。
public class PerformanceTestFilterProvider : IFilterProvider
{
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
return new[] {new Filter(new PerformanceTestFilter(), FilterScope.Global, 0)};
}
}
次に、フィルターを直接追加する代わりに、フィルタープロバイダーを次の場所に追加しますApplication_Start()
。
FilterProviders.Providers.Add(new PerformanceTestFilterProvider());