У меня есть ситуация, когда я хочу кэшировать ответ страницы на основе условия, подобного этому ответу:
Условное кэширование с использованием OutputCacheAttribute в Asp.net MVC 4
Но в моем коде это зависит от столбца базы данных isCachable
& cacheDuration
, поэтому всякий раз, когда у меня есть данные, помеченные как isCachable
, мне нужно кэшировать данные, которые иначе отбрасывают процесс кэширования.
Например:
[DonutOutputCache(Duration = 600)]//if possible make this user defined
[CompressContent]
[MinifyHtml]
[MinifyXml]
public async System.Threading.Tasks.Task<ActionResult> Index()
{
try
{
using (var db = new DBEntities())
{
var countryState = new Models.CountryStates
{
countryList = await db.Countries.Where(c => c.isactive == true && c.sort_name == "us").ToListAsync(),
States = await db.States.Where(s => s.country_id == 231).ToListAsync(),
cacheStatus = await db.cacheProfile.FirstOrDefaultAsync(c=>c.Profile="CacheTest")
};
return View(countryState);
}
}
catch (Exception ex)
{
throw ex;
}
}
Здесь я хочу выполнить две вещи: продолжительность, основанная на том, что определено пользователем в cacheStatus
, и кэшировать только тех, кто помечен как кешируемый:
public class cacheStatus
{
public int Duration { get; set; }
public string Profile { get; set; }
public bool isCacheable { get; set; }
}
Каким должен быть лучший способ для достижения этой цели, когда данные ответа могут отличаться по реакции динамических объектов, но столбцы кэша останутся прежними?