2013-05-27 4 views
1

У меня есть приложение MVC, в котором я хочу кэшировать вывод Action, но условно основан на бизнес-логике. Но мне не повезло, я знаю о CacheOutputAttribute, но это статическое правило.Условное выходное кэширование в MVC

В частности, у меня есть таблица документов, используемая для хранения двоичных данных для сайта интрасети. И когда используемым типом документа является изображение, я хочу разрешить браузеру кэшировать файл, поэтому ему не нужно запрашивать его каждый раз.

Я пробовал следующее, но не повезло, что браузер распознал актив как кешируемый.

public ActionResult View(Guid id) 
{ 
    /* 
     get document from database 
    */ 
    switch (document.ContentType) 
    { 
     case "image/jpeg": 
     case "image/tiff": 
     case "image/x-png": 
     case "image/png": 
     case "image/gif": 
      Response.Cache.SetExpires(DateTime.Now.AddMinutes(30)); 
      Response.Cache.SetCacheability(HttpCacheability.Private); 
      Response.Cache.SetValidUntilExpires(true); 
      break; 
    } 
    return File(document.Data, document.ContentType); 
} 

ответ

0

Почему не требуется использовать OutputCache, например, с помощью VaryByParam?

Попробуйте

http://msdn.microsoft.com/en-us/library/system.web.mvc.outputcacheattribute(v=vs.108).aspx

и этот

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

+0

это может быть полезно слишком http://wiki.asp.net/page.aspx/655/caching-in- aspnet/NC –

+0

Или вы можете использовать свойство VaryByCustom. Использование вы можете найти здесь http://www.dhuvelle.com/2011/09/aspnet-mvc-custom-outputcache-with.html –

+0

'VaryByParam' предполагает, что мои критерии являются параметром запроса, которого нет в этом дело. Моя логика зависит от типа документа, который я получаю из базы данных, используя параметр documentId. 'VaryByCustom' близок, но зависит от одной функции, которую вы размещаете в' global.asax' (на основе того, что вы связали). Хотя я мог взломать что-то вместе, используя это, кажется, что если я когда-либо добавлю вторую страницу с условным кешированием, мне будет весело, пытаясь сохранить эту функцию в 'global.asax'. –