【发布时间】:2011-09-23 22:06:27
【问题描述】:
当我在 MVC3 中创建 OutputCacheAttribute 的简单子类时,我在理解发生了什么时遇到了一些问题。代码如下:
public class ExampleOutputCacheAttribute : OutputCacheAttribute
{
public ExampleOutputCacheAttribute()
{
// breakpoint here
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// breakpoint here
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// breakpoint here
base.OnActionExecuted(filterContext);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
// breakpoint here
base.OnResultExecuting(filterContext);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
// breakpoint here
base.OnResultExecuted(filterContext);
}
}
第一次请求具有此属性的控制器操作时,构造函数和所有重写的方法都会被命中,但如果我刷新页面,则不会命中任何方法或构造函数。就好像缓存是从OutputCacheAttribute外部读取的,但是查看OutputCacheAttribute的MVC源代码,我可以看到在OnActionExecuting中有用于检查缓存页面并返回结果的代码:
filterContext.Result = new ContentResult() { Content = cachedValue };
任何人都可以了解正在发生的事情吗?
【问题讨论】: