У меня возникают некоторые проблемы с пониманием того, что происходит, когда я создаю простой подкласс OutputCacheAttribute в MVC3. Вот код:
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, но, глядя на исходный код MVC для OutputCacheAttribute, я вижу, что в OnActionExecuting есть код для проверки кешированной страницы и возврата результата:
filterContext.Result = new ContentResult() { Content = cachedValue };
Может ли кто-нибудь пролить свет на то, что происходит?