ActionFilterAttribute вызывается для всех действий

Возможно, я неправильно понял смысл ActionFilterAttribute, но теперь у меня есть следующее:

public class MyCustomAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    //do something useful here
  }
}

Затем в моем домашнем контроллере у меня есть следующие методы действий:

public class HomeController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  [MyCustom]
  public ActionResult Test()
  {
    return View();
  }
}

Теперь я ожидаю, что OnActionExecuting сработает, когда я попытаюсь получить доступ к /Home/Test, но не когда я попытаюсь получить доступ к /Home/Index.

Однако он срабатывает для обоих методов действия. Я также проверил внутри OnActionExecuting, что на самом деле вызывается действие Index.

Есть ли вероятность того, что OnActionExecuting будет вызываться только при вызове метода действия, отмеченного атрибутом?


person Øyvind Bråthen    schedule 03.01.2012    source источник
comment
удалите тот, который присутствует в global.asax.   -  person user960567    schedule 03.01.2012


Ответы (1)


Проверьте, присутствует ли MyCustomAttribute в коллекции GlobalFilters в Global.asax.

person Kedar Vaidya    schedule 03.01.2012
comment
Это решило это. Сначала это был глобальный фильтр, прежде чем я превратил его в атрибут фильтра. Большое спасибо! - person Øyvind Bråthen; 03.01.2012
comment
@ ØyvindKnobloch-Bråthen Не могли бы вы уточнить, что вы сделали, чтобы решить эту проблему? У меня такая же проблема, если я добавлю ее в глобальные фильтры, она будет выполняться при каждом действии. Если я его не добавлю, он никогда не будет выполнен. Куда мне его добавить? Я не вижу другого типа фильтров, чтобы добавить его. - person Kyle; 29.03.2013
comment
Вам не нужно добавлять его куда-либо специально. Если вы отлаживаете его, можете ли вы проверить, входит ли он вообще в OnActionExecuting? - person Øyvind Bråthen; 30.03.2013