2014-09-18 4 views
4

Я использую Microsoft RedisOutputCacheProvider и имеют очень простой PartialView, который я кэширование, основываясь на текущего пользователя SESSIONID через VaryByCustom:Использование Response.RemoveOutputCacheItem с RedisOutputCacheProvider

[OutputCache(VaryByCustom = "User", Duration = 3600)] 
[ChildActionOnly] 
public ActionResult Notifications() 
{ 
    return PartialView("Partials/Notifications"); 
} 

Это прекрасно работает и тайники, как и ожидалось , однако я хотел бы вручную истечь этот OutputCache с другой страницы. Я пробовал:

Response.RemoveOutputCacheItem("/Controller/Notifications"); 

Но это не работает. Я также не вижу ни одного из ключей OutputCache через мое хранилище Redis или через мой внутренний код, но я определенно могу видеть, что представление кэшируется.

+2

Есть вы посмотрели: http://stackoverflow.com/questions/8968508/httpresponse-removeoutputcacheitem-is-not-working? –

+0

@MarcGravell Спасибо! Это не оказалось в моем поиске, поскольку я думал, что это связано с конкретным OutputCacheProvider. Я дам это попробовать завтра, а не быть действием ChildOnly для меня не очень важно. – CodingIntrigue

ответ

4

Вы попробовали что-то вроде этого?

// Get the url for the action method: 
var staleItem = Url.Action("Action", "Controller"); 

// Remove the item from cache 
Response.RemoveOutputCacheItem(staleItem); 

Я думаю, что вам нужно провести ссылку на ваш ActionResult.

удачи :)

PS: Может быть, эта ссылка поможет: The Blog of Dan Esparza

0

Если вы делаете заказ кэша четкая логика может оказаться полезным, тоже:

private void ClearResponseCache(ActionExecutingContext filterContext) 
    { 
     if (filterContext == null) 
      return; 

     var urlHelper = new UrlHelper(filterContext.RequestContext); 
     var resolvedAction = urlHelper.Action(
      filterContext.ActionDescriptor.ActionName, 
      filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, 
      new RouteValueDictionary(filterContext.ActionParameters)); 

     if (resolvedAction != null) 
      filterContext.HttpContext.Response.RemoveOutputCacheItem(resolvedAction); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^