我在某个操作上使用donut output caching,该操作使用此操作过滤器:
public sealed class DoStuffAttribute : ActionFilterAttribute {
private bool HasRun = false;
public override void OnActionExecuting(ActionExecutingContext context) {
HasRun = true;
}
public override void OnActionExecuted(ActionExecutingContext context) {
HasRun = true;
}
public override void OnResultExecuting(ResultExecutingContext context) {
if (HasRun) doSomething();
}
public override void OnResultExecuted(ResultExecutedContext context) {
if (HasRun) doSomething();
}
}
对于第一个请求,设置了HasRun
,然后缓存了操作的结果。
对于以下请求,OnActionExecuting
和OnActionExecuted
未运行,因为操作已缓存。但是,在运行的OnResultExecuting
和OnResultExecuted
方法中,HasRun
标志为真!
OutputCache不仅会缓存结果,还会缓存操作状态过滤器吗?如果没有,这里发生了什么?