我有一个控制器,它在控制器中调用一个名为GetTypes()
的方法[OutputCache(Duration = 6000)]
public List<SelectListItem> GetTypes()
{
return Datetime.Now();
}
如果我从另一个操作方法的控制器内部调用它,为什么这个方法不会缓存?当我直接使用URL或@Render来调用它时,它似乎只是缓存..
“本地主机/家/ GetTypes”
答案 0 :(得分:3)
是的,这就是它的工作方式,以及它的工作方式。
原因是属性不会神奇地起作用。有些东西必须检查它们并根据它们做事。在处理请求时,该代码是MVC的正常管道的一部分。
当您直接调用该方法时,绕过正常管道,因此不会评估和/或运行属性。
除此之外,简单的常识应告诉您缓存仅适用于响应。如果没有响应(因为你直接调用它)它将不适用。
您应该做的是执行子操作。您将如何做到这一点取决于您调用方法的位置和方式。因此,除非您向我们展示调用该方法的代码(及其周围的上下文),否则我无法帮助您。