/// <summary> /// 创建缓存策略 /// </summary> /// <param name="context">控制器上下文</param> /// <param name="action">Action 信息</param> /// <param name="parameters">Action 参数</param> /// <returns>缓存策略</returns> protected override CachePolicy CreateCachePolicy(ControllerContext context, ActionDescriptor action, IDictionary <string, object> parameters) { var httpMethod = context.HttpContext.Request.HttpMethod; if (!httpMethod.EqualsIgnoreCase("get") && !httpMethod.EqualsIgnoreCase("header"))//如果不是GET或Header请求,都不予缓存。 { return(null); } //如果存在 Cacheable 筛选器,则不再提供默认策略。 if (action.GetCustomAttributes(typeof(CacheableAttribute), true).Any() || action.ControllerDescriptor.GetCustomAttributes(typeof(CacheableAttribute), true).Any()) { return(null); } ControllerCachePolicyProvider provider = GetControllerProvider(MvcEnvironment.GetAreaName(context), action.ControllerDescriptor.ControllerName); if (provider != null) { var policy = provider.CreateCachePolicy(context, action, parameters); if (policy != null) { return(policy); } } return(MvcEnvironment.CreateCachePolicy(context, action, parameters)); }
/// <summary> /// 获取缓存策略 /// </summary> /// <param name="context">MVC 请求上下文</param> /// <param name="action">Action 信息</param> /// <param name="parameters">Action 参数</param> /// <returns>缓存策略</returns> protected override CachePolicy CreateCachePolicy(ControllerContext context, ActionDescriptor action, IDictionary <string, object> parameters) { if (CachePolicyProvider != null) { return(CachePolicyProvider.CreateCachePolicy(context, action, parameters)); } var httpMethod = context.HttpContext.Request.HttpMethod; if (!httpMethod.EqualsIgnoreCase("get") && !httpMethod.EqualsIgnoreCase("header"))//如果不是GET或Header请求,都不予缓存。 { return(null); } var provider = context.Controller as IMvcCachePolicyProvider; if (provider == null) { var _provider = context.Controller as ICachePolicyProvider; if (_provider != null) { provider = new MvcCachePolicyProviderWrapper(_provider); } } var policy = provider.CreateCachePolicy(context, action, parameters); if (policy != null) { return(policy); } return(MvcEnvironment.CreateCachePolicy(context, action, parameters)); }