public CachedResponseResult( ICachedResponse cachedResponse ) { if ( cachedResponse == null ) throw new ArgumentNullException( "cachedResponse" ); _cachedResponse = cachedResponse; }
/// <summary> /// 插入缓存 /// </summary> /// <param name="cachedResponse">可被缓存的响应数据</param> /// <returns>缓存项</returns> public override CacheItem UpdateCache(ICachedResponse cachedResponse) { var cacheItem = CreateCacheItem(cachedResponse); CacheStorageProvider.InsertCacheItem(cacheItem); return(cacheItem); }
public CachedResponseResult(ICachedResponse cachedResponse) { if (cachedResponse == null) { throw new ArgumentNullException("cachedResponse"); } _cachedResponse = cachedResponse; }
/// <summary> /// 刷新输出缓存 /// </summary> /// <param name="cachedResponse">响应的缓存</param> protected virtual void UpdateCache(ICachedResponse cachedResponse) { if (CachePolicy == null) { return; } CachePolicy.UpdateCache(cachedResponse); }
/// <summary> /// 创建一个缓存项 /// </summary> /// <param name="token">缓存项的缓存依据</param> /// <param name="cached">缓存的数据</param> /// <param name="duration">最大缓存时间</param> public CacheItem(CacheToken token, ICachedResponse cached, TimeSpan duration) { CacheToken = token; CachedResponse = cached; var shake = Math.Min(DurationWhenCreated.TotalMilliseconds / 50, maxShake.TotalMilliseconds); var random = new Random(DateTime.Now.Millisecond); var offset = TimeSpan.FromMilliseconds(random.NextDouble() * shake); Expiration = DateTime.UtcNow + duration + offset; DurationWhenCreated = duration; }
/// <summary> /// 创建一个缓存项 /// </summary> /// <param name="token">缓存项的缓存依据</param> /// <param name="cached">缓存的数据</param> /// <param name="duration">最大缓存时间</param> public CacheItem( CacheToken token, ICachedResponse cached, TimeSpan duration ) { CacheToken = token; CachedResponse = cached; var shake = Math.Min( DurationWhenCreated.TotalMilliseconds / 50, maxShake.TotalMilliseconds ); var random = new Random( DateTime.Now.Millisecond ); var offset = TimeSpan.FromMilliseconds( random.NextDouble() * shake ); Expiration = DateTime.UtcNow + duration + offset; DurationWhenCreated = duration; }
private async Task Save <T>(ICachedResponse response) { try { var result = await(Task <T>) response.Task; var file = await FileSystem.Current.LocalStorage.CreateFileAsync($"{response.Identifier}.cache", CreationCollisionOption.ReplaceExisting); var json = JsonConvert.SerializeObject(new FileCachedResponse <T>() { Identifier = response.Identifier, Date = response.Date, Result = result, }); await file.WriteAllTextAsync(json); } catch (Exception) { } }
/// <summary> /// 从缓存的输出创建一个 ActionResult /// </summary> /// <param name="response">已被缓存的输出</param> /// <returns>用于输出缓存的 ActionResult</returns> public static ActionResult ToCachedResult(this ICachedResponse response) { return(new CachedResponseResult(response)); }
/// <summary> /// 刷新缓存 /// </summary> /// <param name="cachedResponse">可被缓存的响应</param> /// <returns>缓存项</returns> public abstract CacheItem UpdateCache( ICachedResponse cachedResponse );
protected override void OutputResponse(HttpContextBase context, ICachedResponse responseData) { response = responseData; }
/// <summary> /// 创建缓存项 /// </summary> /// <param name="cachedResponse"></param> /// <returns></returns> public CacheItem CreateCacheItem(ICachedResponse cachedResponse) { return(new CacheItem(CacheToken, cachedResponse, Duration)); }
protected override void OutputResponse( HttpContextBase context, ICachedResponse responseData ) { response = responseData; }
/// <summary> /// 派生类重写此方法自定义输出响应的逻辑 /// </summary> /// <param name="responseData">响应信息</param> protected virtual void OutputResponse( ICachedResponse responseData ) { responseData.Apply( Response ); }
/// <summary> /// 刷新输出缓存 /// </summary> /// <param name="cachedResponse">响应的缓存</param> protected virtual void UpdateCache( ICachedResponse cachedResponse ) { if ( CachePolicy == null ) return; CachePolicy.UpdateCache( cachedResponse ); }
/// <summary> /// 派生类重写此方法自定义输出响应的逻辑 /// </summary> /// <param name="context">HTTP 上下文</param> /// <param name="responseData">响应信息</param> protected virtual void OutputResponse(HttpContextBase context, ICachedResponse responseData) { responseData.Apply(context.Response); }
/// <summary> /// 派生类重写此方法自定义输出响应的逻辑 /// </summary> /// <param name="responseData">响应信息</param> protected virtual void OutputResponse(ICachedResponse responseData) { responseData.Apply(Response); }
/// <summary> /// 派生类重写此方法自定义输出响应的逻辑 /// </summary> /// <param name="context">HTTP 上下文</param> /// <param name="responseData">响应信息</param> protected virtual void OutputResponse( HttpContextBase context, ICachedResponse responseData ) { responseData.Apply( context.Response ); }
/// <summary> /// 刷新缓存 /// </summary> /// <param name="cachedResponse">可被缓存的响应</param> /// <returns>缓存项</returns> public abstract CacheItem UpdateCache(ICachedResponse cachedResponse);
private async Task Delete(ICachedResponse response) { }
/// <summary> /// 插入缓存 /// </summary> /// <param name="cachedResponse">可被缓存的响应数据</param> /// <returns>缓存项</returns> public override CacheItem UpdateCache( ICachedResponse cachedResponse ) { var cacheItem = CreateCacheItem( cachedResponse ); CacheStorageProvider.InsertCacheItem( cacheItem ); return cacheItem; }
/// <summary> /// 创建缓存项 /// </summary> /// <param name="cachedResponse"></param> /// <returns></returns> public CacheItem CreateCacheItem( ICachedResponse cachedResponse ) { return new CacheItem( CacheToken, cachedResponse, Duration ); }
/// <summary> /// 更新缓存数据 /// </summary> /// <param name="cachedResponse">可被缓存的响应数据</param> /// <param name="context">MVC 请求上下文</param> /// <param name="policy">缓存策略</param> protected virtual void UpdateCache(ICachedResponse cachedResponse, ControllerContext context, CachePolicy policy) { policy.UpdateCache(cachedResponse); }
/// <summary> /// 更新缓存数据 /// </summary> /// <param name="cachedResponse">可被缓存的响应数据</param> /// <param name="context">MVC 请求上下文</param> /// <param name="policy">缓存策略</param> protected virtual void UpdateCache( ICachedResponse cachedResponse, ControllerContext context, CachePolicy policy ) { policy.UpdateCache( cachedResponse ); }