Asp.net mvc MVC中的条件输出缓存

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

我有一个MVC应用程序,我想缓存操作的输出,但有条件地基于业务逻辑。但我运气不好,我知道CacheOutputAttribute,但这是一个静态规则

具体来说,我有一个文档表,用于存储内部网站点的二进制数据。当提供的文档类型是图像时,我希望允许浏览器缓存该文件,这样它就不需要每次都请求它

我尝试了以下方法,但没有成功地让浏览器将资产识别为可缓存

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
中维护该功能。