Asp.net mvc MVC中的条件输出缓存
我有一个MVC应用程序,我想缓存操作的输出,但有条件地基于业务逻辑。但我运气不好,我知道CacheOutputAttribute,但这是一个静态规则 具体来说,我有一个文档表,用于存储内部网站点的二进制数据。当提供的文档类型是图像时,我希望允许浏览器缓存该文件,这样它就不需要每次都请求它 我尝试了以下方法,但没有成功地让浏览器将资产识别为可缓存Asp.net mvc MVC中的条件输出缓存,asp.net-mvc,caching,asp.net-mvc-4,outputcache,Asp.net Mvc,Caching,Asp.net Mvc 4,Outputcache,我有一个MVC应用程序,我想缓存操作的输出,但有条件地基于业务逻辑。但我运气不好,我知道CacheOutputAttribute,但这是一个静态规则 具体来说,我有一个文档表,用于存储内部网站点的二进制数据。当提供的文档类型是图像时,我希望允许浏览器缓存该文件,这样它就不需要每次都请求它 我尝试了以下方法,但没有成功地让浏览器将资产识别为可缓存 public ActionResult View(Guid id) { /* get document from databas
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);
}
为什么不想使用OutputCache,例如使用VaryByParam 试试这个 还有这个
也可以使用VaryByCustom属性。您可以在这里找到的用法
VaryByParam
假设我的条件是请求的一个参数,而在本例中不是。我的逻辑取决于使用documentId参数从数据库获取的文档类型VaryByCustom
已关闭,但它取决于您在global.asax中放置的单个函数(基于链接内容)。虽然我可以用它来拼凑一些东西,但如果我再添加一个具有条件缓存的页面,我会很高兴尝试在global.asax
中维护该功能。