/// <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="provider">缓存策略提供程序</param> public void RegisterCacheProvider( ControllerCachePolicyProvider provider, string controllerName, string areaName = null ) { lock ( _providersSync ) { var name = areaName + "." + controllerName; if ( _providers.ContainsKey( name ) ) { if ( string.IsNullOrEmpty( areaName ) ) throw new InvalidOperationException( string.Format( "已经为控制器 \"{0}\" 注册了缓存策略提供程序", controllerName ) ); else throw new InvalidOperationException( string.Format( "已经为区域 \"{1}\" 的控制器 \"{0}\" 注册了缓存策略提供程序", controllerName, areaName ) ); } _providers.Add( name, provider ); } }
/// <summary> /// 注册控制器缓存策略提供程序 /// </summary> /// <param name="provider">缓存策略提供程序</param> public void RegisterCacheProvider(ControllerCachePolicyProvider provider, string controllerName, string areaName = null) { lock ( _providersSync ) { var name = areaName + "." + controllerName; if (_providers.ContainsKey(name)) { if (string.IsNullOrEmpty(areaName)) { throw new InvalidOperationException(string.Format("已经为控制器 \"{0}\" 注册了缓存策略提供程序", controllerName)); } else { throw new InvalidOperationException(string.Format("已经为区域 \"{1}\" 的控制器 \"{0}\" 注册了缓存策略提供程序", controllerName, areaName)); } } _providers.Add(name, provider); } }