2014-01-31 3 views
0

Google 어플 전반에 걸쳐 OutputCache에 넣을 수있는 많은 콘텐츠가 있지만이 콘텐츠는 언제든지 모든 사용자가 새로 고칠 수 있습니다. 사용자가 새로 고침 작업을 시작할 때 캐시를 완전히 지우려면해야합니다.OutputCache 항목의 이름은 어떻게 알 수 있습니까?

나는 충분히 간단 할 것이라고 생각했는데 HttpResponse에는 RemoveFromOutputCache이라는 메서드가 있습니다. 그러나이 메서드는 캐시 된 항목의 이름 인 문자열을 사용합니다. 캐시 된 항목 이름 목록을 얻는 쉬운 방법이없는 것처럼 보입니다.

은 결과적으로 나는 다음 클래스와 OutputCacheAttribute 오버라이드 (override) 한 : 특정 행동이 내 응용 프로그램에 명중 될 때

public class HierarchyOutputCache : OutputCacheAttribute 
{ 
    public static readonly ConcurrentBag<string> CachedPages = new ConcurrentBag<string>(); 

    public HierarchyOutputCache(params string[] varyParameters) 
    { 
     Location = OutputCacheLocation.Server; 
     Duration = int.MaxValue; 
     VaryByParam = string.Join(";", varyParameters); 
    } 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
     CachedPages.Add(filterContext.HttpContext.Request.RawUrl); 
    } 
} 

그런 다음 나는 다음과 같은 작업을 수행 할 수 있습니다

HierarchyOutputCache.CachedPages합니다. ForEach (Response.RemoveOutputCacheItem); 나는 내 속성에 저장하고있는 RawUrl에 잘못된 문자열을 전달하고 있기 때문에

그러나, Response.RemoveOutputCacheItem 내가 생각하는 작동하지 않는 것은.

어디에서나이 이름이 무엇인지에 관한 정보를 찾을 수 없습니까?

답변

1

나는 쉽게 내 HierarchyOutputCache 클래스에서 다음과 같은 항목의 이름을 사용하여이 문제를 해결 : 예상대로 HierarchyOutputCache.CachedPages.ForEach(Response.RemoveOutputCacheItem)이 일에

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    base.OnActionExecuted(filterContext); 
    CachedPages.Add(filterContext.HttpContext.Request.CurrentExecutionFilePath); 
} 

이 내 전화를 의미!

관련 문제