我认为这将是一件简单的事情,但它让我发疯。我只是添加了以下...
[OutputCache(Duration = 300)]
在行动之前
public ViewResult Index(string parameter) {...}
但它没有缓存它,我在操作内的调试器中放置了一个断点,每次我进入该页面时它都会命中它。如果我将Location
参数设置为,它确实有效,Client
但我希望它是基于服务器的。我是否必须在其他地方启用缓存才能正常工作?
我认为这将是一件简单的事情,但它让我发疯。我只是添加了以下...
[OutputCache(Duration = 300)]
在行动之前
public ViewResult Index(string parameter) {...}
但它没有缓存它,我在操作内的调试器中放置了一个断点,每次我进入该页面时它都会命中它。如果我将Location
参数设置为,它确实有效,Client
但我希望它是基于服务器的。我是否必须在其他地方启用缓存才能正常工作?
发现了问题。Base 控制器在 中设置了一个 cookie OnActionExecuting
,我发现设置 cookie 的页面不会存储在输出缓存中,因此无论[OutputCache]
指令如何,基本上都不会缓存页面。
我有同样的问题,我通过修复参数VaryByParam的确切参数解决了这个问题。
[OutputCache(Duration=120, VaryByParam ="argument1")]
这样做而不是VaryByParam ="*"
我在我的项目中遇到了这个问题并找到了解决方案。在 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);
}
希望这条线索对其他人有所帮助。谢谢!