自定义ASP.NET MVC ActionFilterAttribute - 挂钩永远不会被调用

aro*_*sca 16 c# asp.net-mvc actionfilterattribute

嗨,我正在尝试做一些看起来有点容易的事情,并且以这种方式记录,但由于某种原因,它并不那么容易.

基本上我写了这样的东西:

public class CacheControllAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    { 
        //do something
        base.OnResultExecuting(filterContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在这样的动作结果上使用它时:

[CacheControllAttribute]
public ActionResult SomeAction()
{
    //whatever
}
Run Code Online (Sandbox Code Playgroud)

我的自定义覆盖函数永远不会被调用...

有什么想法吗?或者如何以不同的方式实现它?

Dav*_*ean 27

一个可能很愚蠢的建议,但你把它添加到你的global.asax
这是我的一个应用程序的示例:

public class MvcApplication : System.Web.HttpApplication     
{
  public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  {
    filters.Add(new LogonAuthorize());
    filters.Add(new HandleErrorAttribute());
  }
}
Run Code Online (Sandbox Code Playgroud)


Yar*_*ara 20

我的错误是我引用了System.Web.Http.Filters,而不是System.Web.Mvc

  • 非常感谢Yara.我也犯了同样的错误,并从你的评论中吸取了教训.因此,一个投票给你.:-) (4认同)

aro*_*sca 5

最终弄清楚,最终我将过滤器放到了实际上是ActionResult函数的函数上,但是它是由另一个调用它的方法返回的,因此过滤器只执行一次入口点动作。