public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { await base.OnActionExecutionAsync(context, next); if ( context.HttpContext.Response != null && !( context.HttpContext.Response.StatusCode >= (int)HttpStatusCode.OK && context.HttpContext.Response.StatusCode < (int)HttpStatusCode.Ambiguous ) ) { return; } IServiceProvider serviceProvider = context.HttpContext.RequestServices; IApiCacheOutput cache = serviceProvider.GetRequiredService(typeof(IApiCacheOutput)) as IApiCacheOutput; CacheKeyGeneratorFactory cacheKeyGeneratorFactory = serviceProvider.GetRequiredService(typeof(CacheKeyGeneratorFactory)) as CacheKeyGeneratorFactory; ICacheKeyGenerator cacheKeyGenerator = cacheKeyGeneratorFactory.GetCacheKeyGenerator(cacheKeyGeneratorType); string controllerName = this.controller ?? (context.ActionDescriptor as ControllerActionDescriptor)?.ControllerTypeInfo.FullName; string baseCacheKey = cacheKeyGenerator.MakeBaseCacheKey(controllerName, this.methodName); await cache.RemoveStartsWithAsync(baseCacheKey); }
public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { await base.OnResultExecutionAsync(context, next); bool isCacheable = context.Result is StatusCodeResult actionResult ? IsCacheableStatusCode(actionResult.StatusCode) : IsCacheableStatusCode(context.HttpContext.Response?.StatusCode); if (!isCacheable) { return; } IServiceProvider serviceProvider = context.HttpContext.RequestServices; IApiCacheOutput cache = serviceProvider.GetRequiredService(typeof(IApiCacheOutput)) as IApiCacheOutput; CacheKeyGeneratorFactory cacheKeyGeneratorFactory = serviceProvider.GetRequiredService(typeof(CacheKeyGeneratorFactory)) as CacheKeyGeneratorFactory; ICacheKeyGenerator cacheKeyGenerator = cacheKeyGeneratorFactory.GetCacheKeyGenerator(cacheKeyGeneratorType); string controllerName = this.controller ?? (context.ActionDescriptor as ControllerActionDescriptor)?.ControllerTypeInfo.FullName; string baseCacheKey = cacheKeyGenerator.MakeBaseCacheKey(controllerName, this.methodName); await cache.RemoveStartsWithAsync(baseCacheKey); }