属性如何阻止MVC Action的执行?

时间:2014-01-17 17:16:17

标签: asp.net-mvc custom-attributes outputcache

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
}

1 个答案:

答案 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