在MVC
中,OutputCacheAttribute
能够阻止执行正在装饰的操作(如果存在相对缓存)
如何使用自定义属性实现相同的机制?
在其他作品中,我希望能够装饰一个动作,并根据属性内部的逻辑,决定动作是否应该继续执行。
附加
我已经实现了一种机制,通过该机制,如果对动作的请求到达时使用flushaction=flush_silent
等查询字符串,则自定义属性(扩展OutputCacheAttribute
)会使缓存无效。
我还想做的,不是执行动作:
[JHOutputCache(CacheProfile = "ContentPageController.Index")]
public ActionResult Index(string url)
{
//custom code that should not execute when flushing the cache
}
答案 0 :(得分:2)
当JHOutputCache
扩展OutputCacheAttribute
,派生自ActionFilterAttribute
时,停止执行基础操作非常简单:
public class JHOutputCacheAttribute : OutputCacheAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (condition)
filterContext.Result = new EmptyResult();
else
base.OnActionExecuting(filterContext);
}
}
您可以在此处返回任何有效的ActionResult,包括您可能派生的任何自定义ActionResult
。