У меня есть приложение 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);
}
это может быть полезно слишком http://wiki.asp.net/page.aspx/655/caching-in- aspnet/NC –
Или вы можете использовать свойство VaryByCustom. Использование вы можете найти здесь http://www.dhuvelle.com/2011/09/aspnet-mvc-custom-outputcache-with.html –
'VaryByParam' предполагает, что мои критерии являются параметром запроса, которого нет в этом дело. Моя логика зависит от типа документа, который я получаю из базы данных, используя параметр documentId. 'VaryByCustom' близок, но зависит от одной функции, которую вы размещаете в' global.asax' (на основе того, что вы связали). Хотя я мог взломать что-то вместе, используя это, кажется, что если я когда-либо добавлю вторую страницу с условным кешированием, мне будет весело, пытаясь сохранить эту функцию в 'global.asax'. –