3

我认为这将是一件简单的事情,但它让我发疯。我只是添加了以下...

[OutputCache(Duration = 300)]

在行动之前

public ViewResult Index(string parameter) {...}

但它没有缓存它,我在操作内的调试器中放置了一个断点,每次我进入该页面时它都会命中它。如果我将Location参数设置为,它确实有效,Client但我希望它是基于服务器的。我是否必须在其他地方启用缓存才能正常工作?

4

3 回答 3

8

发现了问题。Base 控制器在 中设置了一个 cookie OnActionExecuting,我发现设置 cookie 的页面不会存储在输出缓存中,因此无论[OutputCache]指令如何,基本上都不会缓存页面。

于 2013-11-11T14:02:56.787 回答
0

我有同样的问题,我通过修复参数VaryByParam的确切参数解决了这个问题。

[OutputCache(Duration=120, VaryByParam ="argument1")]

这样做而不是VaryByParam ="*"

于 2017-03-27T12:02:45.923 回答
0

我在我的项目中遇到了这个问题并找到了解决方案。在 BaseController 中(虽然它可能是一个通用控制器),其他一些开发人员添加了一个属性 [DisableCache] 来禁用缓存,并且在从基本控制器中删除该属性后,[OutputCache] 工作正常。

    //[DisableCache]
    public class BaseController : Controller
    { 
    }
  
    [OutputCache(Location = OutputCacheLocation.Any,Duration = int.MaxValue, VaryByParam = "none")]
    public ActionResult GetIntegratedModules()
    {
        var applications = cacheManagerService.GetAllAspNetApplications();

        var model = new IntegratedModuleListViewModel
        {
            Applications = applications
        };

        return PartialView("_IntegratedModulesPartial", model);
    } 

希望这条线索对其他人有所帮助。谢谢!

于 2020-07-02T07:15:36.240 回答