2012-02-07 3 views
3

ASP.Net MVC 3.Удалить действие из кэша вывода

Я нашел подобные вопросы/ответы, но ни один не кажется, решить эту проблему ...

Похожие: HttpResponse.RemoveOutputCacheItem is not working

How to "invalidate" portions of ASP.NET MVC output cache?

Я использую OutputCache для кэширования FileContentResult (изображения).

Мои действия выглядит следующим образом:

[HttpGet] 
[OutputCache(Location = OutputCacheLocation.Client, Duration = 300, VaryByParam = "id")] 
public FileContentResult Photo(int id) { 
    byte[] photo = //GetPhoto; 

    return File(photo,"image/jpeg"); 
} 

На мой взгляд, я должен следующее:

<img src="@Url.Action("Photo", "Client", new {id = Model.Id})"/> 

Это прекрасно работает, и кэширование вывода работает, как ожидалось .... Теперь проблема

Я пытаюсь сбросить кеш после обновления.

код в действии, которое обновляет выглядит следующим образом:

var url = Url.Action("Photo", "Client", new {id = Model.Id}); 
Response.RemoveOutputCacheItem(url); 

Проблема заключается в кэш не сбрасывается. Когда я отлаживаю, я не могу найти, где находится объект кэша (я попробовал System.Web.HttpContext.Current.Cache, но у него, похоже, нет кэшированного элемента).

Спасибо за помощь!

ответ

1

Я не совсем уверен, что ваш случай, но я нашел о детских мероприятиях по мнению: они используют свой собственный кэш (не System.Web.HttpContext.Current.Cache), который вы можете получить доступ через статический член

CacheOutputAttribute.ChildActionCache 

Кэш дочерних действий имеет довольно сложный ключ, который я не смог вычислить. Итак, я получаю решение добавить новую переменную (такую ​​версию или временную метку) к моей модели и передать ее в качестве параметра к методу действия; поэтому я могу аннулировать свой кеш с изменением этого свойства.

Однако я не уверен, что это ваш случай на 100%, так как вы не выполняете кеширование дочерних действий.

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

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